使用java将json对象转换为parquet格式,而不转换为avro(不使用spark、hive、pig、impala)

eoxn13cs  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(602)

我有一个场景,使用java将作为json对象的消息转换为apacheparquet格式。任何示例代码或示例都会有所帮助。据我所知,无论是Hive,Pig,Spark转换信息Parquet正在使用。我需要转换为Parquet,而不涉及这些只有java。

gblwokeq

gblwokeq1#

我也遇到了同样的问题,而且据我所知,如果不使用avro或其他框架,那么parquet编写的示例就不多了。最后我和阿芙罗去了
看看这个,也许对你有帮助。

wrrgggsh

wrrgggsh2#

要将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);
    }
  }
}

相关问题