Databricks 上周發布了 Apache Spark 3.0,并將此作為新版 Databricks Runtime 7.0 的一部分。3.0.0 版本包含 3400 多個補丁,為 Python 和 SQL 功能帶來了重大進展。
Spark 是用于大數據處理,數據科學,機器學習和數據分析等領域的統一引擎。
Spark 3.0 重要變化:
- 與 Spark 2.4 相比,TPC-DS 的性能提升了2倍,主要通過自適應查詢執行、動態分區修剪和其他優化實現
- 兼容 ANSI SQL
- 針對 pandas API 的重大改進,包括 Python 類型提示和額外的 pandas UDF
- 改進 Python 錯誤處理,簡化 PySpark 異常提醒
- 為結構化流(structured streaming)提供新 UI
- 調用 R 語言自用戶定義函數(User-Defined Function)的速度可提高 40 倍
- 解決了 Jira 上 3400 多個 issue,這些 issue 的分布情況如下圖所示
改進 Spark SQL 引擎
Spark SQL 是支持大多數 Spark 應用程序的引擎。在 Spark 3.0 中,46% 的補丁被應用于 SQL,提升了性能和 ANSI 兼容性。如下圖所示,Spark 3.0 的性能大約是 Spark 2.4 的 2 倍。
下面看看 Spark SQL 引擎中的主要新功能。
自適應查詢執行(Adaptive Query Execution)
新的自適應查詢執行(AQE) 框架通過在運行時生成更好的執行計劃來提高性能并簡化調整,即使由于缺少或使用不正確的數據統計信息和錯誤估計的成本而致使初始計劃不理想時,也是如此。此版本引入了三個主要的自適應優化:動態合并 shuffle 分區可簡化甚至避免調整 shuffle 分區的數量、動態切換連接策略部分避免了由于缺少統計信息或錯誤估計大小而導致執行次計劃的情況,以及動態優化傾斜連接(optimizing skew joins )。
動態分區修剪 (Dynamic Partition Pruning)
當優化器無法在編譯時識別其可以跳過的分區,將會應用“動態分區修剪”功能。這在星型模式中很常見,星型模式由一個或多個事實表組成,這些事實表引用了任意數量的維度表。在執行這種聯接操作中,我們可以通過識別維度表過濾之后的分區來修剪聯接從事實表中讀取的分區。在 TPC-DS 基準測試中,102 個查詢中有 60 個查詢獲得 2 到 18 倍的顯著加速。
Spark 3.0 中的其他更新
Spark 3.0 除了在 SQL,Python 和流技術方面包含部分關鍵改進,還提供了許多其他的新功能。詳情查看發布說明,發現對 Spark 的所有其他改進,包括數據源、生態系統和監視等。