Json对象使用Java到镶木地板格式,而无需转换为AVRO(不使用Spark,Hive,Pig,Impala)
我有一个场景,使用Java将作为Json对象呈现的消息转换为Apache Parquet格式。任何示例代码或示例都会有所帮助。据我所知,将消息转换为Parquet,可以使用Hive,Pig,Spark。我需要转换为 Parquet,而不仅仅通过 Java 来涉及这些内容。
我有一个场景,使用Java将作为Json对象呈现的消息转换为Apache Parquet格式。任何示例代码或示例都会有所帮助。据我所知,将消息转换为Parquet,可以使用Hive,Pig,Spark。我需要转换为 Parquet,而不仅仅通过 Java 来涉及这些内容。
要将 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);
}
}
}