原因就不解释了,总之是因为多线程并行往hdfs写造成的(因为每个DataFrame/RDD分成若干个Partition,这些partition可以被并行处理)。
其结果就是一个存下来的文件,其实是hdfs中一个目录,在这个目录下才是众多partition对应的文件,最坏的情况是出现好多size为0的文件。
如果确实想避免小文件,可以在save之前把DaraFrame的partition设为0: (当然,这必然影响程序效率)
1. 如果是Spark 1.3.x, 可以调用函数如下:
【DataFrame2】=【DataFrame1】.repartition(1);
【DataFrame2】.save(path);
2. 如果是Spark 1.4.0, 可以调用如下函数:
【DataFrame2】=【DataFrame1】.coalecse(1, false)
本文介绍如何通过调整Spark DataFrame的分区数来避免在HDFS上产生过多的小文件,特别是当进行多线程并行写入操作时。文章提供了针对不同Spark版本的具体实现方法。
1731

被折叠的 条评论
为什么被折叠?



