使用 Java 将 Json 对象转换为 Parquet 格式而不转换为 AVRO(不使用 Spark、Hive、Pig、Impala) [英] Json object to Parquet format using Java without converting to AVRO(Without using Spark, Hive, Pig,Impala)

查看:35
本文介绍了使用 Java 将 Json 对象转换为 Parquet 格式而不转换为 AVRO(不使用 Spark、Hive、Pig、Impala)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个场景,其中使用 Java 将作为 Json 对象存在的消息转换为 Apache Parquet 格式.任何示例代码或示例都会有所帮助.就我发现的将消息转换为 Parquet 而言,正在使用 Hive、Pig、Spark.我需要转换为 Parquet,而无需仅通过 Java 涉及这些.

I have a scenario where to convert the messages present as Json object to Apache Parquet format using Java. Any sample code or examples would be helpful. As far as what I have found to convert the messages to Parquet either Hive, Pig, Spark are being used. I need to convert to Parquet without involving these only by Java.

推荐答案

要将 JSON 数据文件转换为 Parquet,您需要一些内存表示.Parquet 没有自己的 Java 对象集;相反,它重用来自其他格式的对象,如 Avro 和 Thrift.这个想法是 Parquet 与您的应用程序可能已经在使用的对象本身一起工作.

To convert JSON data files to Parquet, you need some in-memory representation. Parquet doesn't have its own set of Java objects; instead, it reuses the objects from other formats, like Avro and Thrift. The idea is that Parquet works natively with the objects your applications probably already use.

要转换您的 JSON,您需要将记录转换为 Avro 内存对象并将它们传递给 Parquet,但您不需要将文件转换为 Avro,然后再转换为 Parquet.

To convert your JSON, you need to convert the records to Avro in-memory objects and pass those to Parquet, but you don't need to convert a file to Avro and then to Parquet.

转换为 Avro 对象已经为您完成,参见 Kite 的 JsonUtil,可以用作 .转换方法需要一个 Avro 模式,但您可以使用相同的库来 从 JSON 数据推断 Avro 模式.

Conversion to Avro objects is already done for you, see Kite's JsonUtil, and is ready to use as a file reader. The conversion method needs an Avro schema, but you can use that same library to infer an Avro schema from JSON data.

要写入这些记录,您只需要使用 ParquetAvroWriter.整个设置如下所示:

To write those records, you just need to use ParquetAvroWriter. The whole setup looks like this:

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

这篇关于使用 Java 将 Json 对象转换为 Parquet 格式而不转换为 AVRO(不使用 Spark、Hive、Pig、Impala)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆