Json对象使用Java到镶木地板格式,而无需转换为AVRO(不使用Spark,Hive,Pig,Impala)

2022-09-02 03:53:48

我有一个场景,使用Java将作为Json对象呈现的消息转换为Apache Parquet格式。任何示例代码或示例都会有所帮助。据我所知,将消息转换为Parquet,可以使用Hive,Pig,Spark。我需要转换为 Parquet,而不仅仅通过 Java 来涉及这些内容。


答案 1

要将 JSON 数据文件转换为 Parquet,您需要一些内存中的表示形式。Parquet没有自己的一组Java对象;相反,它重用其他格式的对象,如Avro和Thrift。这个想法是,Parquet 可以本机处理应用程序可能已经使用的对象。

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

转换为Avro对象已经为您完成,请参阅Kite的JsonUtil,并准备用作文件读取器。转换方法需要 Avro 架构,但您可以使用同一库从 JSON 数据推断 Avro 架构

要写入这些记录,您只需要使用 .整个设置如下所示: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);
    }
  }
}

答案 2

我遇到了同样的问题,我所理解的是,如果没有使用avro或其他框架,就没有太多的样本可用于镶木地板编写。最后,我和Avro一起去了。:)

看看这个,可能会帮助你。