如何应对SparkSQL DataFrame保存到hdfs时出现的过多小文件问题

缘由就不解释了,总之是由于多线程并行往hdfs写形成的(由于每一个DataFrame/RDD分红若干个Partition,这些partition能够被并行处理)。多线程

其结果就是一个存下来的文件,实际上是hdfs中一个目录,在这个目录下才是众多partition对应的文件,最坏的状况是出现好多size为0的文件。函数

若是确实想避免小文件,能够在save以前把DaraFrame的partition设为0: (固然,这必然影响程序效率)
spa

1. 若是是Spark 1.3.x,  能够调用函数以下:.net

    【DataFrame2】=【DataFrame1】.repartition(1);线程

    【DataFrame2】.save(path);get

2. 若是是Spark 1.4.0, 能够调用以下函数:it

    【DataFrame2】=【DataFrame1】.coalecse(1, false)spark