parquet如何确定使用哪种编码?

x3naxklr  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(407)

上下文:
我有两个相同的数据集(比如说左和右),每个数据集中有112个Parquet文件。
这些Parquet文件是使用配置单元通过转换分隔的平面文件创建的。
用于创建分隔平面文件的进程在左进程和右进程之间略有不同。
我注意到两个数据集之间有一个显著的大小差异,尽管其中的内容完全相同。左侧数据集为400gb,右侧数据集为420gb。
当我使用Parquet工具检查Parquet模式时,我注意到左数据集和右数据集使用了不同的编码,如下所示(对于一列):
左:

column_a:  INT64 SNAPPY DO:0 FPO:4 SZ:5179987/6161135/1.19 VC:770100 ENC:PLAIN,RLE,BIT_PACKED

正确的:

column_a:  INT64 SNAPPY DO:0 FPO:4 SZ:3040269/5671813/1.87 VC:782499 ENC:BIT_PACKED,PLAIN,RLE,PLAIN_DICTIONARY

我的问题是:
Parquet地板如何决定使用哪种编码类型,以及是什么让Parquet地板选择了不同的编码?这是我们可以用Hive/Spark配置控制的吗?

jvlzgdj9

jvlzgdj91#

我认为邮件列表中的回复信息是我所知道的最好的答案。简而言之,您不能直接控制parquet对任何给定列使用的编码。有一些事情可能有助于改进它一点,比如指定您希望编写一个parquet版本2文件而不是parquet版本1文件,但这不是精确的控制。也许可以做一些事情,但可能需要深入了解实木地板实现的内部。

相关问题