Introduction
Apache Spark 4.2 將更多現代資料與 AI 堆疊移入引擎本身。基於 Spark 4.x,此版本新增受治理的指標、向量與 top-K 基本元件、更以 Arrow 為優先的 Python 路徑、一級變更資料擷取,以及更強大的串流與操作基礎。
這使得 Spark 在 AI 應用程式的兩端都更有用。它改善了提供給 AI 代理的資料品質與新鮮度,並讓應用程式與代理更容易將 Spark 作為遠端執行服務呼叫。AI 故事具體呈現為:可信賴的語義、原生檢索基本元件、新鮮的變更資料,以及通往 Spark 規模運算的開放介面。
Spark 4.2 可透過四項效益來理解:
- 一次定義真相:Metric views 將受治理的業務指標置於 Spark 中,讓 SQL、BI 工具、應用程式與 AI 系統都能使用相同的定義。
- 從任何地方存取 Spark:Spark Connect、PySpark、Arrow 以及 Python Data Source 的改善,讓從服務與 Python 生態系呼叫 Spark 變得更容易。
- 在 SQL 中執行 AI 原生分析:向量函式、NEAREST BY、草圖、排序以及地理空間類型,將更多分析建置區塊直接帶入 Spark SQL。
- 安全地移動變更中的資料:Auto CDC、CHANGES 介面、Data Source V2 以及 Real-Time Streaming,讓持續變更中的資料更容易正確處理。
這些變更共同協助組織使用單一開放引擎來準備資料、定義業務意義、檢索相關語境,並讓分析與 AI 應用程式保持最新。
Metrics and Semantic Modeling: Define Truth Once
Spark 4.2 引入 metric views,為 Spark SQL 帶來原生語義層。團隊可以一次定義業務指標,並在儀表板、報表、應用程式與 AI 工具中一致地使用它們。
這很重要,因為許多重要的指標並非安全可加總的。比率、相異計數、留存率以及類似量值,當每個取用者以不同粒度重寫公式時,可能產生不正確的結果。Metric views 讓維度與量值成為 Spark 能理解的一級物件,讓引擎得以保留預期的彙總語義。
一旦定義了 metric view,使用者即可透過不同維度查詢相同的受治理量值:
對於 AI 應用程式而言,這特別重要。代理不應與儀表板以不同方式計算營收,或在使用者變更請求分組時回傳不同答案。受治理的 metric view 為 SQL、BI 與 AI 提供單一真相來源,並一致地套用 Spark 分析、目錄解析與權限。
Spark Connect and PySpark: Reach Spark from Everywhere
Spark as a service API
Spark Connect 透過基於 gRPC 與 Arrow 的協定,將用戶端與 Spark 伺服器分離。用戶端建立邏輯計畫,伺服器分析並執行它,結果以 Arrow 批次回傳。用戶端不需要完整的 Spark 執行環境或共置的 JVM。
這讓 Spark 更容易嵌入筆記本、服務、開發工具與 AI 應用程式。代理或應用程式可以從自己的執行環境呼叫 Spark,而 Spark 將分析、最佳化、執行與治理保留在伺服器端。
Spark 4.2 持續縮小與 Spark Classic 的相容性差距。改善項目包括更好的 RDD API 相容性、spark.read.* 與 SparkSession.emptyDataFrame 的 DataFrame 輸入、改善的可偵錯性、錯誤傳播、狀態回報,以及 YARN 叢集模式支援。這些變更共同讓 PySpark 與 Spark Connect 更快、更相容,並更容易在大規模與遠端環境中操作。
A more Arrow-first Python path
Python 仍然是使用者使用 Spark 建置資料與 AI 工作負載的主要方式之一。在 Spark 4.2 中,Arrow 最佳化的 Python UDF 執行預設啟用,因此現有 UDF 無需改寫程式碼即可使用更快的欄位式路徑。Pandas 3 支援也讓升級 Python 環境與 Spark 一起進行變得更容易。
對於需要更多控制的程式碼,Arrow UDF 將資料保留在 PyArrow 陣列中,避免不必要的 Pandas 轉換。Spark 也擴展了 Python 執行的分析與偵錯功能,包括 Python Data Sources 的時間與記憶體分析、改善的工作者診斷,以及可作為資料查詢的記錄。
Spark 4.2 也透過 Arrow C Data Interface 與 PyCapsule 協定改善互通性。當雙方都支援時,Spark DataFrames 可以移入 Polars 或 DuckDB 等 Arrow 原生工具,而無需複製或序列化底層資料。這減少了 Spark 規模處理與更廣泛 Python 及 AI 生態系之間的黏合。
Python Data Sources 進一步減少整合摩擦。團隊可以在 Python 中建置批次或串流讀取器與寫入器、註冊一次,並透過標準 Spark 資料來源介面使用它們。在 4.2 中,分析讓這些連接器更容易調校與操作,而非將它們視為黑盒子。
Spark SQL: AI-Native Analytics in the Engine
Vector scoring and top-K retrieval
Spark 4.2 為向量相似性搜尋、排序與時間序列分析新增 SQL 基本元件。此版本引入向量距離與相似性函式、向量正規化、向量彙總,以及 NEAREST BY(用於基於距離比對的 top-K 排序聯結)。這些基本元件讓檢索、推薦、實體解析與候選產生得以在規模上進行。
Native geospatial analytics
內建 GEOMETRY 與 GEOGRAPHY 類型以及 ST_* 函式,讓位置感知分析無需外部空間擴充功能。Spark 4.2 也新增 Parquet、WKT/WKB、SRID 保留以及 Python 轉換支援。
Fully qualified built-in functions and temporary views
透過 Spark 4.2,您可以將 Spark 提供的函式以 SYSTEM.BUILTIN 限定,明確地呼叫它們。遵循工作階段變數的先例,您也可以將暫存檢視以 SYSTEM.SESSION 完整限定。這有助於與使用者定義函式或持久化關聯區分,並防止注入。
SQL search path
Spark 4.2 新增 SET PATH 的 SQL 搜尋路徑支援,讓跨命名空間解析資料表、函式與變數,以及單純透過將結構描述加入路徑來使用物件庫變得更容易。
Spark 將 SQL 路徑持久化在檢視與 SQL 函式中,以進行可預測的名稱解析。
從 Spark 4.2 開始,SQL 指令碼可以 DECLARE、OPEN、FETCH 與 CLOSE 游標。這讓結果集的逐列處理獲得更多控制,而過去這需要離開 SQL 來使用 DataFrames。
Spark SQL 也新增 Tuple sketches、用於時間序列分析的 time_bucket、跨檔案格式的更廣泛 TIME 類型支援、用於篩選視窗結果的 QUALIFY、Top-K 的 max_by 與 min_by,以及常見彙總函式的 IGNORE NULLS 與 RESPECT NULLS 支援。
這些新增項目共同讓 Spark SQL 對現代分析應用程式更具表達力。
Spark Declarative Pipelines and Auto CDC: Move Changing Data Safely
Spark 4.2 在 Spark Declarative Pipelines (SDP) 中引入 Auto CDC 支援,將一級 SCD (Slow Changing Dimensions) Type 1 處理帶入 Spark。在 Auto CDC 之前,取用變更饋送並將其套用至目標資料表需要手寫 merge 邏輯,這可能因處理刪除與順序錯亂的變更事件而變得複雜且容易出錯。有了 Auto CDC,使用者只需設定 CDC 事件應如何更新目標資料表,並讓 Spark 處理複雜性。
Auto CDC 提供 Python API,用於將 CDC 變更套用至 SCD Type 1 目標資料表。它設計用於常見的擷取與複製工作負載,這些工作負載需要可靠地維護每筆記錄的最新版本,例如客戶設定檔、產品目錄、帳戶記錄與操作參考資料。
例如,Auto CDC 流程現在可以宣告式地表達:
除了 Auto CDC 之外,Spark Declarative Pipelines 也獲得重要的平台強化,包括更安全的伺服器端積極分析處理,以及流程的結構化識別碼。這些變更共同讓宣告式管線開發更可靠,並為 Spark 提供更高階資料工程模式的基礎。
Real-Time Mode in Structured Streaming: Fresher Operational Data
Structured Streaming 中的 Real-Time Mode (RTM) 讓串流查詢以毫秒級的端對端延遲處理資料。這幫助 Spark 開啟全新類別的使用案例,並成為營運資料應用程式(如詐欺偵測、個人化、可觀測性與即時特徵工程)的基礎。
在 Spark 4.2 中,我們將 RTM 擴展至 PySpark:您現在可以在 Real-Time Mode 中執行無狀態串流查詢(不含 Python UDF)。Python 是資料科學家與工程師因其易用性而廣受歡迎的選擇,這將 RTM 的低延遲處理帶給更廣泛的受眾。
展望即將到來的 Spark 4.x 版本,我們將為 RTM 帶來有狀態支援——相關工作已在進行中。此工作追蹤於 SPARK-54699,包含三大元件:
- 新的串流 shuffle (SPARK-56664),將資料從上游階段盡快轉送到下游,而非等待階段完成
- 並行階段排程 (SPARK-57000),允許多個階段同時執行
- 有狀態運算子支援 (SPARK-57228),從 transformWithState 開始
除了有狀態支援之外,我們也正在努力在 RTM 中啟用 Python UDF (SPARK-57237)。
敬請期待——也歡迎您的回饋與貢獻!
Data Source V2: One Surface for Evolving Data Sources
Spark 4.2 標誌著 Data Source V2 的另一個重大進展。DSv2 正在成為連接器的標準基礎,這些連接器透過 Spark 公開讀取、寫入、列層級操作、結構描述演進、變更資料、操作指標與交易。
CDC in DSv2
Spark 4.2 為 DSv2 新增一級變更資料擷取支援。連接器可以透過標準 API 公開變更串流,而使用者可以使用新的 CHANGES SQL 子句、DataFrame API 與 PySpark 繫結來查詢它們。Spark 也在引擎中處理常見的後續處理——刪除寫入時複製的結轉、偵測更新,以及計算每列的淨變更。相同的查詢在任何支援 CDC 的 DSv2 連接器中都會表現一致。
Row-Level Operations, Schema Evolution, and Transactions
Spark 4.2 進一步增強 Data Source V2 (DSv2) 連接器對列層級 DML 操作的支援。MERGE INTO 獲得額外的效能改善,包括全階段程式碼產生,以及對 Spark 4.1 引入的結構描述演進功能的進一步增強。
結構描述演進現在也支援 INSERT INTO 操作,適用於基於名稱與基於位置的欄位解析,減少寫入演進中資料表時的摩擦。此外,UPDATE 與 DELETE 現在也提供操作摘要,補充 Spark 4.1 新增的 MERGE INTO 摘要。MERGE INTO 指標也已擴展與精煉。
Spark 4.2 為生產級 DSv2 連接器與湖屋資料表格式引入額外的建置區塊。主要新增項目包括交易 API 的基礎、增強的分區統計篩選、儲存分區聯結的改善,以及 DSv1 與 DSv2 命令與行為的更密切對齊。這些增強共同讓 DSv2 成為更完整的平台,用於實作湖屋連接器、交易性資料表格式與其他大規模資料系統。
Notable Improvements and Acknowledgements
Spark 4.2 包含多項平台改善,讓 Spark 更容易操作、偵錯、保護與擴展。Spark Web UI 進行重大現代化,採用 Bootstrap 5、深色模式、更好的 SQL 計畫視覺化、查詢時間軸改善,以及伺服器端分頁。Kubernetes 支援透過異質執行器管理、穩定的資源管理器 API 以及降低的控制平面開銷而獲得改善。Spark 4.2 也新增 JDK 25 支援、改善 Web 安全性、擴展 Spark History Server,並升級關鍵相依性,包括 Scala、Parquet、ORC、Arrow、Netty 與 Hadoop。
Spark 4.2 反映了 Apache Spark 社群的力量,來自超過 260 位貢獻者的 1,900 多個提交。我們感謝每一位貢獻程式碼、審查、測試、文件與回饋以使此版本得以實現的人。

Get Started with Spark 4.2
從 spark.apache.org/downloads 下載 Apache Spark 4.2,並查看完整的 Apache Spark 4.2 版本說明以取得完整變更清單。Apache Spark 4.2 也將在 Databricks Runtime 19 Beta 中提供。

0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.