是否在HDFS中为Spark分割了压缩的Parquet文件?

YuG*_*rin 7 gzip apache-spark parquet

在这个主题上搜索和阅读互联网上的答案时,我会收到令人困惑的信息.有谁可以分享他们的经验?我知道gzipped csv不是这样的事实,但是Parquet的文件内部结构可能是Parquet vs csv完全不同的情况?

Uwe*_*orn 17

具有GZIP压缩的镶木地板文件实际上是可拆分的.这是因为Parquet文件的内部布局.它们总是可拆分的,与使用的压缩算法无关.

这个事实主要是由于Parquet文件的设计分为以下几个部分:

  1. 每个Parquet文件由几个RowGroup组成,这些RowGroup应与HDFS Block Size的大小相同.
  2. 每个RowGroup由每列ColumnChunk组成.RowGroup中的每个ColumnChunk具有相同的行数.
  3. ColumnChunks被拆分为Pages,这些可能是64KiB到16MiB的大小.压缩是基于每页进行的,因此页面是作业可以处理的最低并行化级别.

您可以在此处找到更详细的说明:https://github.com/apache/parquet-format#file-format

  • 是的,它们应该是`gz.parquet`.压缩应该通过Parquet实现在Parquet内部完成.如果你有一个工具首先生成Parquet,然后在它们上运行GZIP,这些实际上是无效的Parquet文件.对于Parquet,格式的某些部分不会被压缩(例如标题).这些部件很小(通常大约一个或两个KiB),但压缩它们会导致显着的性能损失. (4认同)
  • 感谢您的回答.只是想确认一下.这些技术上将是.gz.parquet文件而不是parquet.gz文件,对吗?它只是像Microsoft Polybase这样的产品在以镶木地板格式外部导出数据时生成.gz文件,而我还没有验证它是由自己压缩的文件还是文件块内部. (2认同)