比較 Pandas、Polars 和 PySpark:基準分析

banq發表於2024-05-21

比較 Pandas、Polars 和 PySpark 三種工具的不同資料集,得出資料處理未來發展方向的結論。

Pandas
Pandas 一直是資料操作、探索和分析的主要工具。由於 Pandas 與 R 網格檢視的相似性,它在資料科學家中越來越受歡迎。而且,它與機器學習領域相關的其他Python庫同步:

  • NumPy是一個用於實現線性代數和標準計算的數學庫。 Pandas 基於 NumPy。
  • Scikit-learn是機器學習應用程式的參考庫。通常,模型使用的所有資料都已使用 Pandas 或 NumPy 載入、視覺化和分析。

pySpark
Spark 是一個免費的分散式平臺,它以 PySpark 作為其Python庫,改變了大資料處理的正規化。它提供了具有卓越功能的統一計算引擎:

  • 記憶體處理:Spark 的主要特性是其記憶體架構,由於它將資料儲存在記憶體中而不是磁碟上,因此速度很快。
  • 容錯:軟體內建的容錯機制確保可靠的資料處理。彈性分散式資料集進行資料跟蹤,並允許在發生故障等故障時自動恢復。
  • 可擴充套件性:Spark 的水平可擴充套件架構能夠自適應地處理大型資料集,並更快地將資料分發到叢集。資料是分散式的,利用叢集中所有節點的巨大力量。

Polars
Polars 是一個基於 Rust 構建的 Python 庫,將 Python 的靈活性和使用者友好性與 Rust 的速度和可擴充套件性結合起來。 Rust 是一種低階語言,優先考慮效能、可靠性和生產力。它記憶體效率高,效能與 C 和 C++ 相當。

另一方面,Polars 使用 Apache Arrow 作為查詢引擎來執行向量化查詢。 Apache Arrow 是一個用於快速記憶體處理的跨語言開發平臺。
Polars 可以即時執行表格資料操作、分析和轉換操作,有利於大型資料集的使用。

此外,它的語法類似於SQL,資料處理的表達複雜性很容易展示。另一個能力是它的惰性,即評估查詢並應用查詢最佳化。

測試效能
設定
是包含所有資訊的 GitHub 專案的連結。
每個工具有四個筆記本(兩個用於極座標,用於測試急切和惰性評估)。
該程式碼將提取以下任務的執行時間:

  • Reading
  • Filtering
  • Aggregations
  • Joining
  • Writing

分析

  • Pandas 的效能很差,尤其是當資料集規模增大時。不過,它在處理小型資料集時表現尚可。
  • PySpark 雖然是在單機上執行,但當資料集規模增大時,其效能比 Pandas 有了顯著提高。
  • Polars 無論是在急迫配置還是在懶惰配置下,都明顯優於其他工具,與 Pandas 相比提高了 95-97%,與 PySpark 相比提高了 70-75%,這證實了它在單機上處理大型資料集的效率。

結論
所提供的基準測試結果讓我們清楚地瞭解了四種廣泛使用的資料處理工具在不同資料集規模下的效能可擴充套件性。分析得出了幾個重要結論:

  • Pandas 效能可擴充套件性:Pandas 在較小資料集的資料處理方面很受歡迎,但隨著資料量的增加,它的效能就會大打折扣,這表明它並不是處理大容量資料的最佳工具。不過,它整合了大量機器學習和定態庫,是資料科學團隊不可或缺的工具。
  • Polars 的效率:Polars 的配置(Eager 和 Lazy)在所有測試規模中都表現出卓越的效能,遠遠超過 Pandas 和 PySpark,使 Polars 成為能夠處理大型資料集的高效工具。不過,Polars 尚未釋出 Python 的主要版本,在此之前,我不建議在生產系統中使用它。
  • 工具選擇戰略:研究結果強調了根據專案的具體需求和可用資源選擇合適工具的重要性。對於中小型資料集,Polars 具有顯著的效能優勢。對於大規模分散式處理,PySpark 仍然是一個可靠的選擇。
  • 未來考慮:隨著資料集規模的不斷擴大和處理需求的增加,資料處理工具的選擇將變得更加重要。在 Rust 基礎上構建的 Polars 等工具正在出現,其結果必須加以考慮。此外,將 Spark 作為處理一切問題的解決方案的趨勢正在消失,當不需要大規模分散式系統時,這些工具將取而代之。

相關文章