2016-10-04 9 views
4

Jsonオブジェクトとして存在するメッセージをJavaを使用してApache Parquetフォーマットに変換するシナリオがあります。サンプルコードやサンプルが役に立ちます。私がパーケットにメッセージを変換するために見つけたものは、Hive、Pig、Sparkが使用されています。私は、Javaだけでこれらを関与せずに、Parquetに変換する必要があります。JsonオブジェクトをJavaを使用してAVROに変換せずに(Spark、Hive、Pig、Impalaを使用せずに)

+0

ありがとうございました.... – vijju

+0

こんにちはVijju、私は同じソリューションを実装したい、上記のソリューションを正常に実装している場合は、サンプルコードを提供してください。実際に私はちょっと混乱しています。ありがとう。 –

答えて

8

JSONデータファイルをParquetに変換するには、メモリ内の表現が必要です。寄木細工には独自のJavaオブジェクトセットがありません。 AvroやThriftのような他の形式のオブジェクトを再利用します。アイデアは、あなたのアプリケーションがおそらく既に使用しているオブジェクトで、Parquetがネイティブに動作するということです。

JSONを変換するには、Avro のメモリ内オブジェクトにレコードを変換し、それらをParquetに渡す必要がありますが、ファイルをAvroに変換してからParquetに変換する必要はありません。

Avroオブジェクトへの変換は既に行われています(Kite's JsonUtilを参照)。file readerとして使用する準備ができました。変換方法にはAvroスキーマが必要ですが、同じライブラリをinfer an Avro schema from JSON dataに使用できます。

これらのレコードを書き込むには、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); 
    } 
    } 
} 
+0

ありがとうブルー。 – vijju

1

私は同じ問題を抱えていた、と私はアブロまたは他のフレームワークを使用せずに、寄木細工の書き込みのために利用できる多くのサンプルが存在しないことを理解するもの。最後に私はAvroと一緒に行きました。 :)

をご覧ください。thisをご覧ください。

+0

ありがとうございますKrishas – vijju

関連する問題