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
  • Spark Connect 的基于 PyTorch 的分布式 ML 支持 SPARK-42471
  • Python 和 Scala 中对 Spark Connect 的结构化流支持 SPARK-42938
  • Go 客户端的初始版本 SPARK-43351
  • Spark native 和 Python 和 Scala 中的 Spark Connect 客户端之间的大量兼容性改进
  • 改进了客户端应用程序的可调试性和请求处理(异步处理、重试、长期运行的查询)

Spark SQL

特性

  • 添加元数据列文件块开始和长度 SPARK-42423
  • 支持 Scala/Java sql() 中的位置参数 SPARK-44066
  • 在解析器中为函数调用添加命名参数支持 SPARK-43922
  • 支持 SELECT DEFAULT 以及用于 INSERT 源关系的 ORDER BY、LIMIT、OFFSET 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
  • 传递 NULL 时,DECODE 函数返回错误的结果 SPARK-41668
  • 支持 udf ‘luhn_check’ SPARK-42191
  • 支持在 Aggregate 上隐式横向列别名解析 SPARK-41631
  • 支持带有 Window 的查询中的隐式横向列别名 SPARK-42217
  • 添加 3 参数函数别名 DATE_ADD 和 DATE_DIFF SPARK-43492

数据源

  • JDBC 目录的 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 数据源中用户提供的格式加速 Timestamp 类型推断 SPARK-39280
  • Avro 支持由 Long 支持的自定义十进制类型 SPARK-43901
  • 当分区键不匹配但连接表达式兼容时,避免在存储分区连接中进行 shuffle SPARK-41413
  • 将 CSV 格式中的 binary 更改为不支持的 dataType SPARK-42237
  • 允许 Avro 使用类型稳定的字段名称将联合类型转换为 SQL SPARK-43333
  • 加速 JSON/CSV 数据源中使用旧格式的 Timestamp 类型推断 SPARK-39281

查询优化

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

代码生成和查询执行

  • 运行时过滤器应支持多级 shuffle join 端作为过滤器创建端 SPARK-41674
  • HiveSimpleUDF 的 Codegen 支持 SPARK-42052
  • HiveGenericUDF 的 Codegen 支持 SPARK-42051
  • 构建端外 shuffle hash join 的 Codegen 支持 SPARK-44060
  • 实现 to_csv 函数 (StructsToCsv) 的代码生成 SPARK-42169
  • 使 AQE 支持 InMemoryTableScanExec SPARK-42101
  • 在 shuffled hash join 中支持左外连接构建左侧或右外连接构建右侧 SPARK-36612
  • 在 CTAS/RTAS 中遵循 RequiresDistributionAndOrdering SPARK-43088
  • 合并应用于广播连接流端的连接中的桶 SPARK-43107
  • 在 full outer 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
  • 支持在运行时为 worker 中的 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 和 toPandas 创建 DataFrame 中的 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 中的 struct 类型 SPARK-43473

其他值得注意的更改

  • 添加对 df[ ] 在 pyspark.sql.dataframe.DataFrame 中的自动完成支持 [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]

核心

  • 当推送合并 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 数据已迁移,避免在已停用的 executor 丢失时重新运行不必要的任务 SPARK-41469
  • 修复使用 rdd 缓存重试任务情况下的累加器欠计数 SPARK-41497
  • 默认情况下,将 RocksDB 用于 spark.history.store.hybridStore.diskBackend SPARK-42277
  • 支持 spark.kubernetes.setSubmitTimeInDriver SPARK-43014
  • Guava Cache 的 NonFateSharingCache 包装器 SPARK-43300
  • 提高 MapOutputTracker.updateMapOutput 的性能 SPARK-43043
  • 允许应用程序控制它们的元数据是否由外部 Shuffle Service 保存到数据库中 SPARK-43179
  • 将 executor 失败跟踪器从 YARN 上的 Spark 移植到 K8s SPARK-41210
  • 在 KubernetesExecutorBackend 中参数化 driver props fetcher 的最大尝试次数 SPARK-42764
  • 将 SPARK_DRIVER_POD_IP 环境变量添加到 executor pod SPARK-42769
  • 在 executor pod 上挂载 hadoop config map SPARK-43504

结构化流

  • 添加对跟踪 RocksDB 状态存储的固定块内存使用情况的支持 SPARK-43120
  • 添加 RocksDB 状态存储提供程序内存管理增强功能 SPARK-43311
  • 引入 dropDuplicatesWithinWatermark SPARK-42931
  • 向 StreamingQueryListener 引入新的回调 onQueryIdle() SPARK-43183
  • 添加选项以跳过作为 DSv2 sources/sinks 的 StreamingWrite API 一部分的提交协调器 SPARK-42968
  • 向 StreamingQueryListener 引入新的回调 "onQueryIdle" SPARK-43183
  • 为 RocksDB 状态存储提供程序实现基于变更日志的检查点 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 (ML on spark connect) 支持 pandas >= 2.0 SPARK-43783
  • 更新 MLv2 Transformer 接口 SPARK-43516
  • 在分发器之上实现的新 pyspark ML 逻辑回归估计器 SPARK-43097
  • 将 Classifier.getNumClasses 添加回来 SPARK-42526
  • 编写一个 Deepspeed 分布式学习类 DeepspeedTorchDistributor SPARK-44264
  • ML on spark connect 的基本保存/加载实现 SPARK-43981
  • 改进逻辑回归模型保存 SPARK-43097
  • 为 ML on spark connect 实现 pipeline 估计器 SPARK-43982
  • 实现交叉验证器估计器 SPARK-43983
  • 实现分类评估器 SPARK-44250
  • 使 PyTorch Distributor 与 Spark Connect 兼容 SPARK-42993

UI

  • 为 Spark Connect 添加 Spark UI 页面 SPARK-44394
  • 在 Executors 选项卡中支持堆直方图列 SPARK-44153
  • 在 UI 上显示每个失败查询的错误消息 SPARK-44367
  • 在 Executors 选项卡上显示 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 新闻存档

最新消息

存档