2016-11-26 65 views
1

我目前有一個火花集羣,設置有4個工作節點和2個頭節點。我可以從一個頭節點訪問blob存儲中的1.5 GB CSV文件。我發現加載這些數據並使用PySpark緩存需要相當長的時間。有沒有辦法更快地加載數據?通過火花更快地讀取blob存儲區

我想到的一件事是加載數據,然後將數據分割成k個(節點數)不同的段並將它們保存爲blob作爲實木複合地板文件。這樣,我可以並行加載數據集的不同部分,然後union ...但是,我不確定是否所有的數據都剛剛加載到頭節點上,然後當計算髮生時,它將分配給其他機器。如果後者是真的,那麼分區將是無用的。

幫助將不勝感激。謝謝。

回答

1

通常,您需要在blob存儲上擁有更小的文件大小,以便您可以在blob存儲之間傳輸數據並行計算,因此您的傳輸速率更快。一個好的經驗法則是文件大小在64MB到256MB之間;一個很好的參考是維達哈的Data Storage Tips for Optimal Spark Performance

您打電話閱讀文件,然後將其保存回Parquet(使用默認的快速編解碼器壓縮)是個不錯的主意。鑲木地板由Spark本地使用,並且通常可以更快地進行查詢。唯一的調整是分割更多的文件大小與工作節點數量。數據加載到工作節點上,但分區很有用,因爲創建更多任務來讀取更多文件。

+0

啊,我明白了。因此,根據您的建議,我的策略是採用csv文件並將其轉換爲數據框,以便保存到實木複合地板文件。默認情況下,spark將分區文件分爲128 MB文件。然後我可以有一個更快的數據加載從我的後續加載blob。這聽起來合理嗎?順便說一句,感謝您的及時迴應。 – user2253546

+1

是的!你可以從默認分區開始,就像你注意到的一樣,然後適當調整(很多時候,我只是堅持默認設置)。祝你好運,謝謝! –