Json使用Java反对Parquet格式而不转换为AVRO(不使用Spark,Hive,Pig,Impala)

vij*_*jju 17 java json hadoop parquet

我有一个场景,使用Java将存在为Json对象的消息转换为Apache Parquet格式.任何示例代码或示例都会有所帮助.至于我发现将消息转换为Parquet的信息,正在使用Hive,Pig,Spark.我需要转换为Parquet,而不仅仅涉及Java.

小智 17

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

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

转换到Avro的目标已经完成了你,看风筝的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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)