web-dev-qa-db-fra.com

Objet Json au format Parquet en utilisant Java sans conversion en AVRO (sans utiliser Spark, Hive, Pig, Impala)

J'ai un scénario où convertir les messages présents en tant qu'objet Json au format Apache Parquet en utilisant Java. Tout exemple de code ou exemple serait utile. En ce qui concerne ce que j'ai trouvé pour convertir les messages en Parquet, Hive, Pig, Spark sont utilisés. J'ai besoin de convertir en Parquet sans les impliquer uniquement par Java.

15
vijju

Pour convertir des fichiers de données JSON en Parquet, vous avez besoin d'une représentation en mémoire. Parquet n'a pas son propre ensemble d'objets Java; à la place, il réutilise les objets d'autres formats, comme Avro et Thrift. L'idée est que Parquet fonctionne nativement avec les objets que vos applications ont probablement déjà utilisation.

Pour convertir votre JSON, vous devez convertir les enregistrements en objets en mémoire Avro et les transmettre à Parquet, mais vous n'avez pas besoin de convertir un déposer à Avro puis à Parquet.

La conversion en objets Avro est déjà faite pour vous, voir JsonUtil de Kite , et est prête à être utilisée comme lecteur de fichiers . La méthode de conversion nécessite un schéma Avro, mais vous pouvez utiliser cette même bibliothèque pour déduire un schéma Avro à partir des données JSON .

Pour écrire ces enregistrements, il vous suffit d'utiliser ParquetAvroWriter. L'ensemble de la configuration ressemble à ceci:

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

J'ai eu le même problème, et ce que j'ai compris, il n'y a pas beaucoup d'échantillons disponibles pour l'écriture de parquet sans utiliser avro ou d'autres cadres. Enfin, je suis allé avec Avro. :)

Jetez un oeil à this , peut vous aider.

1
Krishas