代码之家  ›  专栏  ›  技术社区  ›  Tom

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

  •  1
  • Tom  · 技术社区  · 6 年前

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

    更新:

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

    文本:306m

    拼花地板:323米

    拼花+俏皮:50米

    从测试结果来看,拼花本身没有压缩,甚至比文本还要大(还不知道原因),拼花+Snappy的压缩效果非常高。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Uwe L. Korn    6 年前

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

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

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

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