0

为了减少NameNode分配的块数。我正在尝试将一些小文件连接到 128MB 文件。这些小文件是 gz 格式,128MB 的文件也必须是 gz 格式。

为了做到这一点,我得到了所有小文件的总大小,并将这个总大小(以 MB 为单位)除以 128 以获得我需要的文件数。

然后我执行一个rdd.repartition(nbFiles).saveAsTextFile(PATH,classOf[GzipCodec])

问题是我的输出目录大小高于我的输入目录大小(高 10%)。我使用默认和最佳压缩级别进行了测试,并且总是获得更高的输出大小。

我不知道为什么我的输出目录比我的输入目录高,但我想这与我正在重新分区输入目录的所有文件的事实有关。

有人可以帮我理解为什么我会得到这个结果吗?

谢谢 :)

4

1 回答 1

1

压缩级别将取决于数据分布。当您rdd.repartition(nbFiles)随机打乱所有数据时,如果输入中有某种结构可以降低熵并启用更好的压缩,那么它将丢失。

您可以尝试其他方法,例如colaesce不进行随机播放或排序以查看是否可以获得更好的结果。

于 2017-03-24T12:33:22.337 回答