從一個引人注目的標題「Spark 為什麼這麼慢?」開始,值得注意的是,稱 Spark「慢」可能意味著多種含義。聚合速度慢嗎?資料加載?存在不同的情況。此外,「Spark」是一個廣泛的術語,其性能取決於程式語言和使用上下文等因素。因此,在深入討論之前,讓我們將標題改進得更加精確。
由於我主要在 Databricks 上使用 Spark 和 Python,因此我將進一步縮小範圍。
優化後的標題將是:
「Spark 的第一印象:『聽說它很快,但為什麼感覺很慢?』初學者的視角」
作為廣泛使用 pandas、NumPy 和機器學習庫的人,我欽佩 Spark 透過平行和分散式處理處理大數據的能力。當我終於在工作中使用 Spark 時,我對它看起來比 pandas 慢的場景感到困惑。不確定出了什麼問題,我發現了一些見解並想與大家分享。
我們簡單介紹一下Spark的基本架構。
(群集模式概述)
Spark 叢集由執行實際處理的 工作節點和協調和計劃執行的驅動程式節點組成。這種架構會影響下面討論的所有內容,因此請記住這一點。
現在,進入重點。
Spark 針對大規模資料處理進行了最佳化,但它也可以處理小型資料集。然而,看看這個基準:
(在單節點機器上對 Apache Spark 進行基準測試)
結果表明,對於 15GB 以下的資料集,pandas 在聚合任務中優於 Spark。為什麼?簡而言之,Spark 最佳化的開銷超過了小資料集的好處。
此連結顯示了 Spark 並不慢的情況,但這些情況通常處於本地叢集模式。對於獨立設置,由於節點之間的網路通訊開銷,較小的資料集可能是缺點。
Spark 採用惰性求值,這表示轉換不會立即執行,而是延遲到某個操作(例如收集、計數、顯示)觸發計算為止。
範例(熊貓):
執行時間:3.04秒
Spark 中的等效項:
執行時間:3分鐘後仍在運作。
為什麼?
Spark 程式碼在 pandas 中有效地執行了此操作:
透過使用 Spark 的快取或重建邏輯以盡量減少重複計算來避免此類模式。
https://spark.apache.org/docs/latest/rdd-programming-guide.html#shuffle-operations
隨機播放 當資料在 Workers 之間重新分配時發生,通常是在 groupByKey、join 或重新分區等操作期間。隨機播放可能會很慢,原因是:
例如,擁有更多 Worker 並不總是能提高洗牌期間的效能。
您覺得這有幫助嗎?如果有效使用,Spark 是個出色的工具。除了加速大規模資料處理之外,Spark 還以其可擴展的資源管理而大放異彩,尤其是在雲端。
嘗試 Spark 來優化您的資料營運和管理!
以上是為什麼 Spark 慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!