压缩 ORC 或镶木地板有什么好处



ORC和拼花文件本身(没有其他压缩选项,如snappy)具有压缩效果(加载到拼花文件中的相同数据将比文本文件小得多),因此我会问是否需要指定snappy等压缩选项来进一步压缩ORC和镶木文件,因为这些文件存储为二进制文件,也许对二进制数据的压缩效果并没有那么大。

更新:

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

文本:306M

镶木地板:323M

镶木地板+快速:50M

从测试结果来看,镶木地板本身似乎没有压缩,它甚至比文本还大(还不知道原因),而且镶木地板+snappy的压缩效果非常高。

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

在列有许多重复值的情况下,我们通常通过字典编码而不是压缩来获得更好的收益。考虑一个具有2个唯一值的字符串列,每个值有16个字节,但有1024行。在将值以明文形式传递给压缩器的情况下,我们将一次压缩16KiB。

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

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

最新更新