Solución:
Para convertir archivos de datos JSON a Parquet, necesita alguna representación en memoria. Parquet no tiene su propio conjunto de objetos Java; en cambio, reutiliza los objetos de otros formatos, como Avro y Thrift. La idea es que Parquet funcione de forma nativa con los objetos que probablemente ya utilicen sus aplicaciones.
Para convertir su JSON, debe convertir los registros a Avro objetos en memoria y pasarlos a Parquet, pero no es necesario convertir un archivo a Avro y luego a Parquet.
La conversión a objetos Avro ya está hecha para usted, consulte JsonUtil de Kite y está lista para usar como lector de archivos. El método de conversión necesita un esquema Avro, pero puede usar esa misma biblioteca para inferir un esquema Avro a partir de datos JSON.
Para escribir esos registros, solo necesita usar ParquetAvroWriter
. Toda la configuración se ve así:
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);
}
}
}