【问题标题】:Json object to Parquet format using Java without converting to AVRO(Without using Spark, Hive, Pig,Impala)使用 Java 将 Json 对象转换为 Parquet 格式而不转换为 AVRO(不使用 Spark、Hive、Pig、Impala)
【发布时间】:2017-02-13 00:09:33
【问题描述】:

我有一个场景,使用 Java 将作为 Json 对象存在的消息转换为 Apache Parquet 格式。任何示例代码或示例都会有所帮助。至于我发现将消息转换为 Parquet 的内容,正在使用 Hive、Pig、Spark。我需要转换为 Parquet,而无需仅通过 Java 参与这些。

【问题讨论】:

  • 提前致谢....
  • 您好 Vijju,我想实现相同的解决方案,如果您已成功实现上述解决方案,请提供示例代码。其实我有点困惑。谢谢。

标签: java json hadoop parquet


【解决方案1】:

要将 JSON 数据文件转换为 Parquet,您需要一些内存表示。 Parquet 没有自己的 Java 对象集。相反,它重用了其他格式的对象,例如 Avro 和 Thrift。这个想法是 Parquet 可以与您的应用程序可能已经使用的对象一起工作。

要转换 JSON,您需要将记录转换为 Avro内存中的对象并将它们传递给 Parquet,但您不需要将文件转换为 Avro,然后再转换为 Parquet。

已经为您完成了到 Avro 对象的转换,请参阅 Kite's JsonUtil,并且可以用作 file reader。转换方法需要 Avro 架构,但您可以使用相同的库来 infer an Avro schema from JSON data

要写入这些记录,您只需要使用ParquetAvroWriter。整个设置如下所示:

Schema jsonSchema = JsonUtil.inferSchema(fs.open(source), "RecordName", 20);
try (JSONFileReader<Record> reader = new JSONFileReader<>(
                    fs.open(source), jsonSchema, Record.class)) {

  reader.initialize();

  try (ParquetWriter<Record> writer = AvroParquetWriter
      .<Record>builder(outputPath)
      .withConf(new Configuration)
      .withCompressionCodec(CompressionCodecName.SNAPPY)
      .withSchema(jsonSchema)
      .build()) {
    for (Record record : reader) {
      writer.write(record);
    }
  }
}

【讨论】:

  • 如何使 schema 生成的字段可选,不是必需的?
【解决方案2】:

我遇到了同样的问题,据我所知,如果不使用 avro 或其他框架,可用于拼花写入的示例并不多。最后我和Avro一起去了。 :)

看看this,可能对你有帮助。

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多