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

我有一个场景,使用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 reader = new JSONFileReader<>( fs.open(source), jsonSchema, Record.class)) { reader.initialize(); try (ParquetWriter writer = AvroParquetWriter .builder(outputPath) .withConf(new Configuration) .withCompressionCodec(CompressionCodecName.SNAPPY) .withSchema(jsonSchema) .build()) { for (Record record : reader) { writer.write(record); } } } 

我有同样的问题,我明白,没有使用avro或其他框架,没有太多的样本可用于镶木地板。 最后我和Avro一起去了。 🙂

看看这个 ,可以帮到你。