2016-08-30 48 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路徑)。 有沒有辦法將數據追加到現有的parquet文件(在路徑上)?在我的情況下,緩存parquetWriter是不可行的。

回答

1

Parquet是一個柱狀文件,它優化了將所有列寫在一起。如果有任何編輯需要重寫該文件。

從維基

面向列的數據庫序列化所有的列的值一起,則下一列的值,依此類推。對於我們的示例表,數據將被存儲在這個時尚:

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

上面的回答是不準確的。 Parquet將列切成塊,並允許將一部分列存儲在單個文件內的多個塊中,因此可以追加。如果您閱讀鑲木地板背後的設計理念 - 很明顯,格式是專爲追加而設計的,通過砌磚牆結構來判斷。 – travnik

+0

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

+0

我認爲append在實木複合客戶端API中不受支持,我知道它在那裏在火花中,但我對支持讀取所需塊的列存儲存有疑問。在這種情況下,追加程序如何工作,可能會在現有的列塊中追加。你有鏈接有建築細節。 – Krishas

相關問題