压缩ORC或parquet有什么好处

What's the benefit to compress ORC or parquet

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

更新:

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

文字:306M

实木复合地板:323M

parquet + snappy: 50M

从测试结果来看,parquet本身是没有压缩的,比text还要大(不知道为什么),parquet+snappy的压缩效果非常好

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

在您的列有很多重复值的情况下,我们通常通过先字典编码再压缩的方式获得更好的产量。考虑一个具有 2 个唯一值的字符串列,每个值 16 个字节,但有 1024 行。在将 plain 中的值传递给压缩器的情况下,我们将一次压缩 16KiB。

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

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