web-dev-qa-db-ja.com

Java AVROに変換せずに(Spark、Hive、Pig、Impalaを使用せずに)

Javaを使用して、Jsonオブジェクトとして存在するメッセージをApache Parquet形式に変換するシナリオがあります。サンプルコードまたはサンプルがあれば役立ちます。メッセージをParquetに変換するために見つけた限り、Hive、Pig、Sparkのいずれかが使用されています。これらをJavaだけに関与させずにParquetに変換する必要があります。

15
vijju

JSONデータファイルをParquetに変換するには、メモリ内表現が必要です。 Parquetには、独自のJavaオブジェクトのセットはありません。代わりに、AvroやThriftなどの他の形式のオブジェクトを再利用します。使用する。

JSONを変換するには、レコードをAvroin-memoryオブジェクトに変換し、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);
    }
  }
}
16
blue

私も同じ問題を抱えていましたが、avroや他のフレームワークを使用しないと寄木細工の書き込みに使用できるサンプルがあまりないことを理解しました。最後に、私はアブロに行きました。 :)

this をご覧ください。

1
Krishas