1. 程式人生 > >如何應對SparkSQL DataFrame儲存到hdfs時出現的過多小檔案問題

如何應對SparkSQL DataFrame儲存到hdfs時出現的過多小檔案問題

原因就不解釋了,總之是因為多執行緒並行往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)