2016-08-30 7 views
1

次のコードを使用して、ParquetWriterを作成し、レコードを書き込んでいます。既存の寄木細工のファイルにデータを追加する方法

ParquetWriter<GenericRecord> parquetWriter = new ParquetWriter(path, writeSupport, CompressionCodecName.SNAPPY, BLOCK_SIZE, PAGE_SIZE); 

final GenericRecord record = new GenericData.Record(avroSchema); 

parquetWriter.write(record); 

しかし、それだけで(specfiedパスで)新しいファイルを作成することができます。 既存の寄木張りファイル(パス)にデータを追加する方法はありますか?私の場合、parquetWriterをキャッシュすることは実現不可能です。

答えて

1

寄木細工は円柱ファイルであり、すべての列をまとめて書き込みを最適化します。編集があれば、ファイルを書き換える必要があります。列指向データベースが一緒に列のすべての値をシリアル化ウィキ

から

、ようにし、次の列の値、および。この例のテーブルでは、データはこの方法で格納されます:

10:001,12:002,11:003,22:004; 
Smith:001,Jones:002,Johnson:003,Jones:004; 
Joe:001,Mary:002,Cathy:003,Bob:004; 
40000:001,50000:002,44000:003,55000:004; 

いくつかのリンク

https://en.wikipedia.org/wiki/Column-oriented_DBMS

https://parquet.apache.org/

+2

が不正確です。寄木細工は列を塊にスライスし、列の一部を1つのファイル内の複数のまとまりに格納できるため、追加が可能です。寄木張りの背後にあるデザイン哲学を読んだら、フォーマットがブロックフッタ構造で判断して追加するように設計されていることは明らかです。 – travnik

+0

https://spark.apache.org/docs/1.4.0/api/java/org/apache/spark/sql/SaveMode.html – bluszcz

+0

私はappendが寄木細工クライアントAPIでサポートされていないと思います。私は、必要なチャンクだけを読むことをサポートする列の記憶装置に疑問を持っています。この場合、追加がどのように機能するかは、既存の列チャンクに追加するチャンスがある可能性があります。建築の詳細を持ったリンクがありますか? – Krishas

関連する問題