Spark 不相同 input/ouput 目录大小(对于相同的数据)

Spark not same input/ouput directory size (for same data)

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

为此,我获取了所有小文件的总大小,并将该总大小(以 MB 为单位)除以 128 以获得我需要的文件数。

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

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

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

谁能帮我理解为什么我会得到这个结果?

谢谢:)

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

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