orc和parquet文件本身(没有其他压缩选项,如snappy)具有压缩效果(加载到parquet文件中的相同数据将比文本文件小得多),因此我会询问是否需要指定snappy等压缩选项来进一步压缩orc和parquet文件,因为这些文件存储为二进制文件,也许压缩效果对二进制数据来说并不是很大。
更新:
我试过一个306m的文本文件
文字:306m
Parquet地板:323m
Parquet地板+snappy:50m
从测试结果来看,似乎Parquet本身没有压缩,它甚至比文字还要大(还不知道原因),而且Parquet+snappy的压缩效果非常高。
1条答案
按热度按时间iaqfqrcu1#
Parquet地板和orc的压缩效率在很大程度上取决于您的数据。在没有压缩的情况下,parquet仍然使用编码来压缩数据。编码使用一种比压缩更简单的方法,并且通常产生与同质数据的通用压缩类似的结果。Parquet地板最常用的编码是字典编码。我们将每个唯一的行值存储在字典中,并将该值的索引存储在字典中。当列中的数据具有非唯一的条目时,这将消除值的重复。但这也增加了我们每行存储一个额外整数的开销。虽然parquet使用尽可能最小的整数类型,但如果一列中只有唯一的值,则此列的总体存储空间将比没有“索引”时的存储空间大。在这种情况下,您应该简单地使用字典编码。
在您的列有许多重复值的情况下,我们通常通过字典编码然后压缩来获得更好的结果。考虑一个具有2个唯一值的字符串列,每个值16字节,但有1024行。在将值以明文形式传递给压缩机的情况下,我们将一次压缩16kib。
使用字典编码,我们将拥有一个32字节和1024字节的字典
int1
(位)值。因此,我们已经通过字典压缩将数据大小减少到160字节。压缩较小的数据总是更快,与熵无关。对于大多数实际数据,编码+压缩效率通常介于两种情况之间。