为了减少NameNode分配的块数。我正在尝试将一些小文件连接到128MB文件。这些小文件采用gz格式,128MB文件也必须采用gz格式。
为了实现这一点,我得到所有小文件的总和大小,并将此总和大小(以MB为单位)除以128,以获得我需要的文件数。
然后我执行rdd.repartition(nbFiles).saveAsTextFile(PATH,classOf[GzipCodec])
问题是我的输出目录大小比输入目录大小要高(高10%)。我测试了默认和最佳压缩级别,并且我总是获得更高的输出大小。
我不知道为什么我的输出目录比我的输入目录高,但我想它与我正在重新分区输入目录的所有文件这一事实有关。
有人可以帮助我理解为什么我会得到这个结果吗?
谢谢:)
答案 0 :(得分:1)
压缩级别取决于数据分布。当你rdd.repartition(nbFiles)
随机抽取所有数据时,如果输入中有一些结构,这会减少熵并实现更好的压缩,那么它就会丢失。
您可以尝试其他一些方法,例如colaesce
,无需随机播放或排序,以确定您是否可以获得更好的结果。