我有一个场景,使用java将作为json对象的消息转换为apacheparquet格式。任何示例代码或示例都会有所帮助。据我所知,无论是Hive,Pig,Spark转换信息Parquet正在使用。我需要转换为Parquet,而不涉及这些只有java。
gblwokeq1#
我也遇到了同样的问题,而且据我所知,如果不使用avro或其他框架,那么parquet编写的示例就不多了。最后我和阿芙罗去了看看这个,也许对你有帮助。
wrrgggsh2#
要将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); } } }
2条答案
按热度按时间gblwokeq1#
我也遇到了同样的问题,而且据我所知,如果不使用avro或其他框架,那么parquet编写的示例就不多了。最后我和阿芙罗去了
看看这个,也许对你有帮助。
wrrgggsh2#
要将json数据文件转换为parquet,需要一些内存表示。parquet没有自己的java对象集;相反,它重用其他格式的对象,比如avro和thrift。其思想是,parquet与应用程序可能已经使用的对象在本机工作。
要转换json,需要将记录转换为avro内存对象并将其传递给parquet,但不需要先将文件转换为avro,然后再转换为parquet。
到avro对象的转换已经为您完成了,请参阅kite的jsonutil,并且可以用作文件读取器。转换方法需要avro模式,但是您可以使用相同的库从json数据推断avro模式。
要写这些记录,你只需要使用
ParquetAvroWriter
. 整个设置如下所示: