我有一个场景,其中使用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。整个设置如下所示:
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); } } }