Spark 发布 3.5.0

Apache Spark 3.5.0 是 3.x 系列的第六个版本。在开源社区的重大贡献下,此版本解决了 1,300 多个 Jira 问题。

此版本为 Spark Connect 引入了更多普遍可用的场景,例如 Scala 和 Go 客户端、分布式训练和推理支持以及结构化流兼容性增强;引入了新的 PySpark 和 SQL 功能,例如 SQL IDENTIFIER 子句、SQL 函数调用中的命名参数支持、HyperLogLog 近似聚合的 SQL 函数支持以及 Python 用户定义表函数;通过 DeepSpeed 简化了分布式训练;引入了运算符之间的水印传播,并在结构化流中引入了 dropDuplicatesWithinWatermark 操作。

要下载 Apache Spark 3.5.0,请访问下载页面。有关详细更改,请查阅 JIRA。我们还在此处整理了一份高级别更改列表,按主要模块分组。

亮点

Spark Connect

  • 将 sql 模块重构为 sql 和 sql-api,以生成可在 Scala Spark Connect 客户端和 Spark 之间共享的最小依赖项集,并避免拉取所有 Spark 传递依赖项。 SPARK-44273
  • 引入 Spark Connect 的 Scala 客户端 SPARK-42554
  • Python Spark Connect 客户端的 Pandas API 支持 SPARK-42497
  • 基于 PyTorch 的 Spark Connect 分布式 ML 支持 SPARK-42471
  • Python 和 Scala 中 Spark Connect 的结构化流支持 SPARK-42938
  • Go 客户端的初始版本 SPARK-43351
  • Spark native 和 Spark Connect 客户端在 Python 和 Scala 之间有许多兼容性改进
  • 改进了客户端应用程序的可调试性和请求处理(异步处理、重试、长寿命查询)

Spark SQL

功能

  • 添加元数据列文件块起始和长度 SPARK-42423
  • 支持 Scala/Java sql() 中的位置参数 SPARK-44066
  • 为函数调用解析器添加命名参数支持 SPARK-43922
  • 支持 INSERT 源关系中使用 ORDER BY、LIMIT、OFFSET 的 SELECT DEFAULT SPARK-43071
  • 为 TVF 调用在 TABLE 参数后添加 PARTITION BY 和 ORDER BY 子句的 SQL 语法 SPARK-44503
  • 在 DESCRIBE 和 SHOW CREATE TABLE 输出中包含列默认值 SPARK-42123
  • 为 Catalog.listCatalogs 添加可选模式 SPARK-43792
  • 为 Catalog.listDatabases 添加可选模式 SPARK-43881
  • 准备执行时的回调 SPARK-44145
  • 支持按名称插入语句 SPARK-42750
  • 为 Scala API 添加 call_function SPARK-44131
  • 稳定的派生列别名 SPARK-40822
  • 支持将通用常量表达式作为 CREATE/REPLACE TABLE OPTIONS 值 SPARK-43529
  • 支持通过 INTERSECT/EXCEPT 关联的子查询 SPARK-36124
  • IDENTIFIER 子句 SPARK-43205
  • ANSI 模式:如果内部转换溢出,Conv 应返回错误 SPARK-42427

函数

  • 添加对 Datasketches HllSketch 的支持 SPARK-16484
  • 支持 aes_encrypt()/aes_decrypt() 的 CBC 模式 SPARK-43038
  • 支持 TableValuedFunction 的 TABLE 参数解析规则 SPARK-44200
  • 实现位图函数 SPARK-44154
  • 添加 try_aes_decrypt() 函数 SPARK-42701
  • array_insert 应在索引为 0 时失败 SPARK-43011
  • 为 to_char 添加 to_varchar 别名 SPARK-43815
  • 高阶函数:array_compact 实现 SPARK-41235
  • 为内置函数添加命名参数的分析器支持 SPARK-44059
  • 对于用户指定列少于目标表的 INSERT,添加 NULL SPARK-42521
  • 添加对 aes_encrypt IV 和 AAD 的支持 SPARK-43290
  • DECODE 函数在传入 NULL 时返回错误结果 SPARK-41668
  • 支持 udf 'luhn_check' SPARK-42191
  • 支持 Aggregate 上的隐式侧向列别名解析 SPARK-41631
  • 在带有 Window 的查询中支持隐式侧向列别名 SPARK-42217
  • 添加 3 参数函数别名 DATE_ADD 和 DATE_DIFF SPARK-43492

数据源

  • JDBC Catalog 的 Char/Varchar 支持 SPARK-42904
  • 通过 JDBC API 和 TVF 动态获取 SQL 关键字 SPARK-43119
  • DataSource V2:处理基于 delta 的源的 MERGE 命令 SPARK-43885
  • DataSource V2:处理基于组的源的 MERGE 命令 SPARK-43963
  • DataSource V2:处理基于组的源的 UPDATE 命令 SPARK-43975
  • DataSource V2:允许将更新表示为删除和插入 SPARK-43775
  • 允许 JDBC 方言覆盖用于创建表的查询 SPARK-41516
  • SPJ:支持部分集群分布 SPARK-42038
  • DSv2 允许 CTAS/RTAS 保留模式可空性 SPARK-43390
  • 添加 spark.sql.files.maxPartitionNum SPARK-44021
  • 处理基于 delta 的源的 UPDATE 命令 SPARK-43324
  • 允许 V2 写入指示建议的 shuffle 分区大小 SPARK-42779
  • 支持 Parquet 的 lz4raw 压缩编解码器 SPARK-43273
  • Avro:写入复杂联合 SPARK-25050
  • 加速 JSON/CSV 数据源中带有用户提供格式的时间戳类型推断 SPARK-39280
  • Avro 支持由 Long 支持的自定义十进制类型 SPARK-43901
  • 当分区键不匹配但连接表达式兼容时,避免在存储分区连接中进行 shuffle SPARK-41413
  • 将二进制更改为 CSV 格式中不支持的数据类型 SPARK-42237
  • 允许 Avro 将联合类型转换为 SQL,字段名与类型保持一致 SPARK-43333
  • 加速 JSON/CSV 数据源中带有旧格式的时间戳类型推断 SPARK-39281

查询优化

  • 子表达式消除支持快捷表达式 SPARK-42815
  • 如果一方可以保持唯一性,则改进连接统计信息估计 SPARK-39851
  • 引入 Window 的组限制,用于基于排名的过滤器以优化 top-k 计算 SPARK-37099
  • 修复优化规则中 null IN (empty list) 的行为 SPARK-44431
  • 如果 partitionSpec 为空,则推断并下推窗口限制 SPARK-41171
  • 如果它们都是不同的聚合函数,则移除外连接 SPARK-42583
  • 在子查询中折叠两个相邻的具有相同分区/顺序的窗口 SPARK-42525
  • 通过 Python UDF 下推限制 SPARK-42115
  • 优化过滤谓词的顺序 SPARK-40045

代码生成和查询执行

  • 运行时过滤器应支持将多级 shuffle join side 作为过滤器创建侧 SPARK-41674
  • HiveSimpleUDF 的 Codegen 支持 SPARK-42052
  • HiveGenericUDF 的 Codegen 支持 SPARK-42051
  • 构建侧外 shuffle 哈希连接的 Codegen 支持 SPARK-44060
  • 实现 to_csv 函数 (StructsToCsv) 的代码生成 SPARK-42169
  • 使 AQE 支持 InMemoryTableScanExec SPARK-42101
  • 在 shuffled hash join 中支持左外连接构建左侧或右外连接构建右侧 SPARK-36612
  • 在 CTAS/RTAS 中遵守 RequiresDistributionAndOrdering SPARK-43088
  • 在应用于广播连接流侧的连接中合并桶 SPARK-43107
  • 在全外 USING 连接中正确设置合并连接键的可空性 SPARK-44251
  • 修复 IN 子查询 ListQuery 可空性 SPARK-43413

其他值得注意的更改

  • 为 USING 连接中的键正确设置可空性 SPARK-43718
  • 修复相关标量子查询中 COUNT(*) 为 null 的错误 SPARK-43156
  • Dataframe.joinWith 外连接应为不匹配的行返回 null 值 SPARK-37829
  • 自动重命名冲突的元数据列 SPARK-42683
  • 在面向用户的文档中记录 Spark SQL 错误类 SPARK-42706

PySpark

功能

  • 支持 Python sql() 中的位置参数 SPARK-44140
  • 支持 sql() 的参数化 SQL SPARK-41666
  • 支持 Python 用户定义表函数 SPARK-43797
  • 支持在运行时为 workers 中的 UDF 和 pandas 函数 API 设置 Python 可执行文件 SPARK-43574
  • 向 PySpark 添加 DataFrame.offset SPARK-43213
  • 在 pyspark.sql.dataframe.DataFrame 中实现 __dir__() 以包含列 SPARK-43270
  • 添加选项以对 arrow UDF 操作使用大型可变宽度向量 SPARK-39979
  • 使 mapInPandas / mapInArrow 支持 barrier 模式执行 SPARK-42896
  • 向 PySpark SparkContext 添加 JobTag API SPARK-44194
  • 支持 Python UDTF 在 Python 中进行分析 SPARK-44380
  • 在 pyspark.sql.types 中公开 TimestampNTZType SPARK-43759
  • 支持嵌套时间戳类型 SPARK-43545
  • 支持从 pandas DataFrame 创建 DataFrame 和 toPandas 中的 UserDefinedType [SPARK-43817]SPARK-43702
  • 向 Pyspark Protobuf API 添加描述符二进制选项 SPARK-43799
  • 接受泛型元组作为 Pandas UDF 的类型提示 SPARK-43886
  • 添加 array_prepend 函数 SPARK-41233
  • 添加 assertDataFrameEqual 实用函数 SPARK-44061
  • 支持 arrow 优化的 Python UDTF SPARK-43964
  • 允许 fp 近似相等自定义精度 SPARK-44217
  • 使 assertSchemaEqual API 公开 SPARK-44216
  • 支持 ps.Series 的 fill_value SPARK-42094
  • 支持从 pandas DataFrame 创建 DataFrame 中的结构体类型 SPARK-43473

其他值得注意的更改

  • 在 pyspark.sql.dataframe.DataFrame 中添加 df[] 的自动完成支持 [SPARK-43892]
  • 弃用并移除将在 pandas 2.0 中移除的 API [SPARK-42593]
  • 将 Python 设置为代码示例的第一页签 - Spark SQL、DataFrames 和 Datasets 指南 SPARK-42493
  • 更新剩余的 Spark 文档代码示例以默认显示 Python SPARK-42642
  • 创建 Arrow RecordBatch 时使用去重字段名 [SPARK-41971]
  • 支持使用 pandas DataFrame 创建 DataFrame 中的重复字段名 [SPARK-43528]
  • 允许在使用 Series 创建 DataFrame 时使用 columns 参数 [SPARK-42194]

核心

  • 当 push merge shuffleMapStage 重试但没有运行任务时,调度 mergeFinalize SPARK-40082
  • 引入 PartitionEvaluator 用于 SQL 运算符执行 SPARK-43061
  • 允许 ShuffleDriverComponent 声明 shuffle 数据是否可靠存储 SPARK-42689
  • 为阶段添加最大尝试次数限制,以避免潜在的无限重试 SPARK-42577
  • 支持使用静态 Spark 配置进行日志级别配置 SPARK-43782
  • 优化 PercentileHeap SPARK-42528
  • 向 TaskScheduler.cancelTasks 添加 reason 参数 SPARK-42602
  • 如果 shuffle 数据已迁移,则避免在已停用的执行器丢失时进行不必要的任务重试 SPARK-41469
  • 修复带 rdd 缓存的重试任务中累加器计数不足的情况 SPARK-41497
  • 默认情况下,对 spark.history.store.hybridStore.diskBackend 使用 RocksDB SPARK-42277
  • 支持 spark.kubernetes.setSubmitTimeInDriver SPARK-43014
  • Guava Cache 的 NonFateSharingCache 包装器 SPARK-43300
  • 提高 MapOutputTracker.updateMapOutput 的性能 SPARK-43043
  • 允许应用程序控制其元数据是否由外部 Shuffle 服务保存到数据库中 SPARK-43179
  • 将执行器故障跟踪器从 Spark on YARN 移植到 K8s SPARK-41210
  • 参数化 KubernetesExecutorBackend 中驱动程序属性获取器的最大尝试次数 SPARK-42764
  • 向执行器 pod 添加 SPARK_DRIVER_POD_IP 环境变量 SPARK-42769
  • 在执行器 pod 上挂载 hadoop config map SPARK-43504

结构化流

  • 添加对跟踪 RocksDB 状态存储的固定块内存使用的支持 SPARK-43120
  • 添加 RocksDB 状态存储提供程序内存管理增强功能 SPARK-43311
  • 引入 dropDuplicatesWithinWatermark SPARK-42931
  • 向 StreamingQueryListener 引入新的回调 onQueryIdle() SPARK-43183
  • 为 DSv2 源/sink 添加跳过提交协调器作为 StreamingWrite API 的一部分的选项 SPARK-42968
  • 向 StreamingQueryListener 引入新的回调“onQueryIdle” SPARK-43183
  • 为 RocksDB State Store Provider 实现基于 Changelog 的检查点 SPARK-43421
  • 为流式有状态操作符中使用的 RocksDB 添加 WRITE_FLUSH_BYTES 支持 SPARK-42792
  • 为流式处理中使用的 RocksDB 添加设置 max_write_buffer_number 和 write_buffer_size 的支持 SPARK-42819
  • RocksDB StateStore 锁获取应在从 inputRDD 获取输入迭代器之后发生 SPARK-42566
  • 引入运算符之间的水印传播 SPARK-42376
  • 清理 RocksDB 检查点目录中的孤立 sst 和日志文件 SPARK-42353
  • 如果异常中存在错误类,则扩展 QueryTerminatedEvent 以包含错误类 SPARK-43482

ML

  • 支持使用 Deepspeed 进行函数分布式训练 SPARK-44264
  • spark3.5 的 sparkML 基本接口:estimator/transformer/model/evaluator SPARK-43516
  • 使 MLv2 (Spark Connect 上的 ML) 支持 pandas >= 2.0 SPARK-43783
  • 更新 MLv2 Transformer 接口 SPARK-43516
  • 在分布式器之上实现新的 pyspark ML 逻辑回归估计器 SPARK-43097
  • 重新添加 Classifier.getNumClasses SPARK-42526
  • 编写 Deepspeed 分布式学习类 DeepspeedTorchDistributor SPARK-44264
  • Spark Connect 上的 ML 的基本保存/加载实现 SPARK-43981
  • 改进逻辑回归模型保存 SPARK-43097
  • 在 Spark Connect 上为 ML 实现管道估计器 SPARK-43982
  • 实现交叉验证器估计器 SPARK-43983
  • 实现分类评估器 SPARK-44250
  • 使 PyTorch 分布式器与 Spark Connect 兼容 SPARK-42993

UI

  • 为 Spark Connect 添加 Spark UI 页面 SPARK-44394
  • 在 Executors 选项卡中支持堆直方图列 SPARK-44153
  • 在 UI 上显示每个失败查询的错误消息 SPARK-44367
  • 在 Executors 选项卡上显示执行器的添加/移除时间 SPARK-44309

构建及其他

移除、行为更改和弃用

即将移除

以下功能将在下一个 Spark 主要版本中移除

  • 对 Java 8 和 Java 11 的支持,最低支持的 Java 版本将是 Java 17
  • 对 Scala 2.12 的支持,最低支持的 Scala 版本将是 2.13

迁移指南

鸣谢

最后但同样重要的是,如果没有以下贡献者,此版本是不可能实现的:Adam Binford, Ahmed Hussein, Alex Jing, Alice Sayutina, Alkis Evlogimenos, Allan Folting, Allison Portis, Allison Wang, Amanda Liu, Andrey Gubichev, Andy Grove, Anish Shrigondekar, Anton Okolnychyi, Bartosz Konieczny, Beishao Cao, Bjørn Jørgensen, Bo Zhang, Bruce Robbins, Chandni Singh, Chao Sun, Chaoqin Li, Cheng Pan, Christopher Cooper, Christopher Watford, ConeyLiu, Daniel Sparing, Daniel Tenedorio, David Lewis, Dongjoon Hyun, Emil Ejbyfeldt, Enrico Minack, Eric Marnadi, Eric Ogren, Erik Krogen, Eugene Gusev, Fei Wang, Fokko Driesprong, Frank Yin, Fu Chen, Gene Pang, Gengliang Wang, Gera Shegalov, Giambattista Bloisi, Guilhem Vuillier, Gurpreet Singh, Haejoon Lee, Harsh Motwani, Henry Mai, Herman Van Hovell, Hisoka-X, Holden Karau, Huanli Wang, Hyukjin Kwon, Ismaël Mejía, Ivan Sadikov, Jack Chen, James Lamb, Jason Li, Jerry Peng, Jia Fan, Jiaan Geng, JinHelin404, Joe Wang, Johan Lasperas, John Zhuge, Josh Rosen, Juliusz Sompolski, Jungtaek Lim, Kazuyuki Tanimura, Kent Yao, Khalid Mammadov, Koray Beyaz, Kris Mok, Kun Wan, Kwafoor, Lee Yang, Leibnizhu, Liang Yan, Liang-Chi Hsieh, Lingkai Kong, Luca Canali, Ludovic Henry, Manu Zhang, Martin Grund, Mathew Jacob, Max Gekk, Menelaos Karavelas, Michael Chen, Michael Zhang, Mingkang Li, Mridul Muralidharan, NarekDW, Navin Viswanath, Niranjan Jayakar, Ole Sasse, Parth Upadhyay, Peter Toth, Qi Tan, Raghu Angadi, Richard Yu, Ritika Maheshwari, Rob Reeves, Robert Dillitz, Rui Wang, Ruifeng Zheng, Runyao Chen, Ryan Berti, Ryan Johnson, Serge Rielau, Serge Smertin, Sergii Druzkin, Shaoyun Chen, Shreyesh Shaju Arangath, Shrikant Prasad, Shu Wang, Siying Dong, Steve Vaughan Jr, Steve Weis, Steven Aerts, Steven Chen, Stove-hust, Szehon Ho, Takuya UESHIN, Tengfei Huang, Terry Kim, Thejdeep Gudivada, Thomas Graves, Tim Nieradzik, Venki Korukanti, Vihang Karajgaonkar, Vinod KC, Vitalii Li, Vsevolod Stepanov, Wanqiang Ji, Warren Zhu, Wei Liu, Weichen Xu, Wen Yuen Pang, Wenchen Fan, Willi Raschkowski, William Hyun, Xiduo You, Xieming LI, Xingbo Jiang, Xinrong Meng, Xinyi Yu, Yang Jie, Yi Zhu, Yihong He, Yikf, Yikun Jiang, Yiqun Zhang, Yohahaha, Yuanjian Li, Yuming Wang, Zhen Li, Ziqi Liu, advancedxy, alexanderwu-db, amousavigourabi, bjornjorgensen, bogao007, bowenliang123, caican00, chong0929, clownxc, frankliee, haoyanzhang, hdaly0, huangxiaopingRD, jdesjean, jerqi, jwang0306, khalidmammadov, kings129, kylerong-db, liangyu-1, lucaspompeun, mcdull-zhang, panbingkun, pegasas, pengzhon-db, ronandoolan2, smallzhongfeng, srielau, stijndehaes, sudoliyang, ted-jenks, tianhanhu, vicennial, wForget, wayne-kyungwonpark, wayneguow, yabola, zeruibao, zhouyifan279, zml1206, zzzzming95


Spark 新闻存档

最新新闻

存档