Spark与输入/输出目录大小不同(对于相同的数据)

时间:2017-03-24 10:20:33

标签: performance file apache-spark namenode

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

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

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

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

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

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

谢谢:)

1 个答案:

答案 0 :(得分:1)

压缩级别取决于数据分布。当你rdd.repartition(nbFiles)随机抽取所有数据时,如果输入中有一些结构,这会减少熵并实现更好的压缩,那么它就会丢失。

您可以尝试其他一些方法,例如colaesce,无需随机播放或排序,以确定您是否可以获得更好的结果。