Introduction
Apache Spark 4.2 将更多现代数据和 AI 技术栈移入引擎本身。在 Spark 4.x 的基础上,此版本添加了受治理指标、向量和 Top-K 原语、更以 Arrow 为先的 Python 路径、一流变更数据捕获,以及更强大的流处理和运维基础。
这使 Spark 在 AI 应用的两个方面都更有用。它提升了提供给 AI 代理的数据质量和新鲜度,并让应用和代理更易于将 Spark 作为远程执行服务调用。AI 故事具体体现在:可信语义、原生检索原语、新鲜变更数据,以及通向 Spark 规模计算的开放接口。
可通过四个好处来理解 Spark 4.2:
- 一次定义真相: 指标视图将受治理的业务指标放入 Spark,以便 SQL、BI 工具、应用和 AI 系统使用相同的定义。
- 从任何地方访问 Spark: Spark Connect、PySpark、Arrow 和 Python Data Source 改进,使 Spark 更容易从服务和 Python 生态调用。
- 在 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 引入指标视图,为 Spark SQL 带来了原生语义层。团队可以一次定义业务指标,并在仪表板、报告、应用和 AI 工具中一致地使用它们。
这很重要,因为许多重要指标并非安全可加。比率、去重计数、留存率和类似度量,当每个消费者以不同粒度重写公式时,可能会产生不正确的结果。指标视图使维度和度量成为 Spark 能理解的一等对象,允许引擎保留预期的聚合语义。
一旦定义了指标视图,用户可以通过不同维度查询相同的受治理度量:
对于 AI 应用,这尤为重要。代理不应与仪表板计算收入的方式不同,或在用户改变请求的分组时返回不同答案。受治理的指标视图为 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 兼容性、DataFrame 输入到 spark.read.* 和 SparkSession.emptyDataFrame、改进的可调试性、错误传播、状态报告以及 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,您可以通过 SYSTEM.BUILTIN 限定来明确调用 Spark 提供的函数。遵循会话变量的先例,您还可以用 SYSTEM.SESSION 完全限定临时视图。这有助于与用户定义函数或持久化关系区分,并防止注入。
SQL search path
Spark 4.2 添加了带 SET PATH 的 SQL 搜索路径支持,使跨命名空间解析表、函数和变量更易,并通过向路径添加模式来简单地使用对象库。
Spark 将 SQL 路径持久化到视图和 SQL 函数中,以实现可预测的名称解析。
从 Spark 4.2 开始,SQL 脚本可以 DECLARE、OPEN、FETCH 和 CLOSE 游标。这允许对结果集进行逐行处理的更多控制,过去需要使用 DataFrames 跳出 SQL。
Spark SQL 还添加了 Tuple 草图、用于时间序列分析的 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(缓慢变化维度)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 还在引擎中处理常见后处理——删除写时复制的 carry-over、检测更新并计算每行的净变更。同一查询在支持 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 多个 commit。我们感谢每一位为使此版本成为可能而贡献代码、评审、测试、文档和反馈的人。

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.