Json object to Parquet format using Java without converting to AVRO(Without using Spark, Hive, Pig,Impala)

前端 未结 2 471
猫巷女王i
猫巷女王i 2020-12-13 02:58

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 ha

2条回答
  •  醉梦人生
    2020-12-13 03:20

    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.

    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.

    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.

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

提交回复
热议问题