2017-04-10 109 views

回答

11

GZIP壓縮的Parquet文件實際上是可拆分的。這是因爲Parquet文件的內部佈局。這些總是可拆分的,獨立於使用的壓縮算法。

這其實主要是由於平面文件的設計,在下面的部分分爲:

  1. 每個平面文件包括幾個RowGroups的,這些應該是大小爲您的HDFS塊大小相同。
  2. 每個RowGroup由每列的ColumnChunk組成。 RowGroup中的每個ColumnChunk具有相同數量的行。
  3. ColumnChunks被分成Pages,這些可能大小爲64KiB到16MiB。 壓縮以每頁爲基礎完成,因此頁面是作業可以工作的最低級別的並行化。

您可以在這裏找到更詳細的解釋:https://github.com/apache/parquet-format#file-format

+1

謝謝您的回答。只是想確認一下。這些技術上會是.gz.parquet文件而不是parquet.gz文件,對嗎?它只是像Microsoft Polybase這樣的產品在以實木複合格式從外部導出數據時生成.gz文件,而我還沒有驗證它是否是由其自身或文件塊內部壓縮的文件。 – YuGagarin

+3

是的,他們應該是'gz.parquet'。壓縮應該通過Parquet實現在Parquet內完成。如果您有一個首先生成Parquet並在其上運行GZIP的工具,則這些工具實際上是無效的Parquet文件。對於Parquet,格式的某些部分不被壓縮(例如頭部)是非常重要的。這些部件很小(通常大約一個或兩個KiB),但壓縮它們會導致顯着的性能損失。 – xhochy