Python – Spark != Pandas + Big Data

Spark != Pandas + 大數據支持

Pandas 和 Spark 操作相同類型的資料—表。然而,他們與之互動的方式卻截然不同。

然而,許多程式設計師經常將他們的學習從 Pandas 擴展到 Spark,假設類似的設計,這會導致效能瓶頸。

今天我給大家舉個例子。

注意:如果您想要一個適合初學者的資源來學習 PySpark,我在這裡介紹了它:不要停留在 Pandas 和 Sklearn!使用 PySpark 開始使用 Spark DataFrames 和大數據 M L。

背景

Spark 中可以執行兩種類型的操作:

轉換:從現有的 DataFrame 建立新的 DataFrame。

操作:這些操作會觸發資料幀上轉換的執行。

為了給您更多上下文,Spark 使用操作,因為與 Pandas 等常見 DataFrame 庫不同,Spark 轉換遵循惰性求值

惰性評估意味著轉換不會立即產生結果。

相反,計算會延後到觸發某個操作為止,例如:

查看/列印資料。

將資料寫入儲存來源。

將資料轉換為Python列表等。

透過延遲評估 Spark 轉換並僅在需要時執行它們,Spark 可以建立邏輯執行計劃並應用任何可能的最佳化。

然而,這裡還有一個被忽視的警告,可能會導致冗餘計算。因此,如果處理不當,它會大幅減慢 Spark 程式的執行工作流程。

讓我們更詳細地了解一下。

惰性評估問題

考慮從儲存中讀取 Spark DataFrame (A) 並對其執行轉換,這會產生另一個 DataFrame (B)。

接下來,我們對 DataFrame B 執行兩個操作(計數行和查看資料),如下所示:

這可以在 PySpark 中翻譯成以下程式碼:

現在,回想一下我們上面討論的內容:操作觸發 Spark 轉換的執行

在上面的程式碼中,第一個動作是df_B.count(),它觸發 CSV 讀取操作和過濾器轉換。

順便說一句,您可能已經注意到,執行方法與 Pandas 的工作方式有很大不同。它不提供惰性評估。因此,每個操作都會立即執行。

繼續,我們還有另一個動作:df_B.show()。此操作再次觸發 CSV 讀取操作和過濾器轉換。

你看到問題了嗎?

我們正在讀取 CSV 檔案並執行相同的轉換兩次。

顯然,在處理大型資料集時,這可能會導致嚴重的效能瓶頸。

解決方案

解決這個問題的常見方法是使用快取

顧名思義,它允許我們將 Spark 轉換的結果緩存在記憶體中以供以後使用。

df.cache()方法可以讓您做到這一點。

注意:除了 之外df.cache(),還有df.persist()method ,它為快取提供了更大的靈活性。但今天我們只討論df.cache()

我們可以使用df.cache()以下方法:

在此程式碼中,第一個操作 ( df_B.count()) 觸發 CSV 讀取操作和過濾器轉換。

然而,與我們之前討論的非快取演示相反,這次過濾器轉換的結果被緩存。

繼續,第二個操作 ( df_B.show()) 使用這些快取的結果來顯示 的內容df_B

很容易理解,快取消除了冗餘操作,從而大大提高了運行時間。

請注意,該df.cache()方法將 DataFrame 緩存在記憶體中。

因此,一旦不再需要緩存內存,建議將其釋放。我們可以使用df.unpersist()以下方法:

也就是說,Spark 是數據科學雇主最搶手的技能之一。將 Spark 添加到您的技能組合中將對您未來的數據科學職業生涯極其有價值。

我在 PySpark 上寫了一篇完整的適合初學者的深入探討(閱讀 102 分鐘):不要停留在 Pandas 和 Sklearn!使用 PySpark 開始使用 Spark DataFrames 和大數據 M L。

如果您是完全的初學者並且以前從未使用過 Spark,那也沒關係。這篇文章涵蓋了一切。

👉 接下來:還有哪些被忽視的 Spark 最佳化技術?

感謝您閱讀數據科學的每日劑量!免費訂閱,每天學習有關 Python 和數據科學的新​​知識和深刻見解。此外,還可以獲得包含 320 多個技巧的免費資料科學 PDF(550 多頁)。

訂閱

您是否對 ML/DS 中的資訊量感到不知所措?

我每週都會發布一些關於對您的 ML/DS 角色技能真正重要的主題的深入探討。

Please follow and like us:
Pin Share

Leave a Comment

Your email address will not be published. Required fields are marked *