2017-04-10 138 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