压缩ORC或实木复合地板有什么好处

时间:2019-02-12 09:57:46

标签: apache-spark hadoop parquet

ORC和Parquet文件本身(没有其他压缩选项,如snappy)具有压缩效果(加载到Parquet文件中的相同数据将比文本文件小得多),所以我会问我是否需要指定压缩选项像snappy一样进一步压缩ORC和Parquet文件,因为这些文件存储为二进制文件,而且对二进制数据的压缩效果可能不大。

更新

我尝试了一个306M的文本文件,然后

文本:306M

镶木地板:323M

镶木地板+活泼的5000万

从测试结果来看,实木复合地板本身没有压缩,甚至比文本还要大(尚不知道原因),并且实木复合地板+ snappy的压缩效果非常高。

1 个答案:

答案 0 :(得分:2)

Parquet和ORC的压缩效率在很大程度上取决于您的数据。在没有压缩的情况下,Parquet仍使用编码来缩小数据。编码使用比压缩更简单的方法,并且对于均匀数据,通常会产生与通用压缩相似的结果。 Parquet最常用的编码是字典编码。我们将每个唯一行值存储在字典中,并将该值的索引存储在字典中。当列中的数据具有非唯一条目时,这将删除值的重复项。但这也增加了我们每行存储一个额外整数的开销。尽管Parquet使用最小的整数类型,但如果一列中只有唯一值,则此列的总存储量将比没有“索引”时的存储量大。在这种情况下,您应该简单地进行字典编码。

在您的列具有许多重复值的情况下,通过字典编码然后压缩,我们通常会获得更好的收益。考虑一个具有2个唯一值的字符串列,每个值16个字节,但1024行。如果将纯格式的值传递给压缩器,我们将立即压缩16KiB。

使用字典编码时,我们将拥有一个32字节和1024个int1(位)值的字典。因此我们已经可以通过字典压缩将数据大小减小到160个字节。与熵无关,压缩大小较小的数据总是更快。

对于大多数真实世界的数据,编码和压缩效率通常介于所列两种情况之间。