Apache Spark 3.5.0是3.x系列的第六个版本。在开源社区的重大贡献下,此版本处理了 1,300 多个 Jira 工单。
此版本引入了更多 Spark Connect 正式发布的方案,例如 Scala 和 Go 客户端、分布式训练和推理支持,以及增强了结构化流式处理的兼容性;引入了新的 PySpark 和 SQL 功能,例如 SQL IDENTIFIER 子句、对 SQL 函数调用的命名参数支持、对 HyperLogLog 近似聚合的 SQL 函数支持以及 Python 用户定义的表函数;使用DeepSpeed简化分布式训练;引入运算符之间的水印传播,在结构化流中引入 dropDuplicatesWithinWatermark 操作。
突出
- Spark Connect 中的 Scala 和 Go 客户端支持 SPARK-42554 SPARK-43351
- 基于 PyTorch 的分布式 ML 支持 Spark Connect SPARK-42471
- Python 和 Scala 中对 Spark Connect 的结构化流支持 SPARK-42938
- Pandas API 支持 Python Spark Connect 客户端 SPARK-42497
- 介绍箭头蟒蛇UDFspark-40307
- 支持Python用户自定义表函数SPARK-43798
- 将 PySpark 错误迁移到错误类 SPARK-42986
- PySpark 测试框架 SPARK-44042
- 添加对数据草图HllSketch SPARK-16484的支持
- 内置 SQL 函数改进 SPARK-41231
- 标识符子句 SPARK-43205
- 将 SQL 函数添加到 Scala、Python 和 R API SPARK-43907
- 添加对 SQL 函数的命名参数支持 SPARK-43922
- 避免在迁移随机数据时丢失已停用的执行程序时重新运行不必要的任务 SPARK-41469
- 分布式机器学习<>火花连接SPARK-42471
- 深速分配器 SPARK-44264
- 为 RocksDB 状态存储 SPARK-43421 实现更新日志检查点
- 在运营商中引入水印传播 SPARK-42376
- 引入 dropDuplicatesWithinWatermark SPARK-42931
- RocksDB 状态存储提供程序内存管理增强功能 SPARK-43311
星火连接
- 将 sql 模块重构为 sql 和 sql-api,以生成可在 Scala Spark Connect 客户端和 Spark 之间共享的最小依赖项集,并避免拉取所有 Spark 传递依赖项。火花-44273
- 介绍 Spark Connect SPARK-42554 的 Scala 客户端
- Pandas API 支持 Python Spark Connect 客户端 SPARK-42497
- 基于 PyTorch 的分布式 ML 支持 Spark Connect 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
- 支持选择默认,顺序依据,限制,偏移插入源关系SPARK-43071
- 为 PARTITION BY 添加 SQL 语法,并在 TVF 调用的 TABLE 参数后添加 ORDER BY 子句 SPARK-44503
- 在描述和显示中创建表输出 SPARK-42123 中包含列默认值
- 为目录添加可选模式.列表目录 SPARK-43792
- 为目录列表数据库 SPARK-43881 添加可选模式
- 准备执行时的回调 SPARK-44145
- 支持按名称插入语句 SPARK-42750
- 为 Scala API SPARK-44131 添加call_function
- 稳定派生列别名 SPARK-40822
- 支持一般常量表达式作为创建/替换表选项值 SPARK-43529
- 支持通过 INTERSECT/EXCEPT SPARK-36124 进行关联的子查询
- 标识符子句 SPARK-43205
- ANSI 模式:如果内部转换溢出,则转换应返回错误 SPARK-42427
功能
- 添加对数据草图HllSketch SPARK-16484的支持
- 通过 aes_encrypt()/aes_decrypt() SPARK-43038 支持 CBC 模式
- 支持表值函数 SPARK-44200 的表参数解析器规则
- 实现位图函数 SPARK-44154
- 添加 try_aes_decrypt() 函数 SPARK-42701
- array_insert应失败,索引为 0 SPARK-43011
- 为 to_char SPARK-43815 添加to_varchar别名
- 高阶功能:array_compact实现SPARK-41235
- 为内置函数 SPARK-44059 添加命名参数的分析器支持
- 为用户指定列表的列少于目标表的插入添加 NULL SPARK-42521
- 添加了对 aes_encrypt IV 和 AAD SPARK-43290 的支持
- 解码函数在传递时返回错误的结果 空火花-41668
- 支持 udf“luhn_check”SPARK-42191
- 支持聚合 SPARK-41631 上的隐式横向列别名解析
- 在使用窗口 SPARK-42217 的查询中支持隐式横向列别名
- 添加 3 参数函数别名DATE_ADD并DATE_DIFF SPARK-43492
数据来源
- 对 JDBC 目录 SPARK-42904 的 Char/Varchar 支持
- 支持通过 JDBC API 和 TVF SPARK-43119 动态获取 SQL 关键字
- 数据源 V2:处理基于增量的源的合并命令 SPARK-43885
- 数据源 V2:处理基于组的源的合并命令 SPARK-43963
- 数据源 V2:处理基于组的源的更新命令 SPARK-43975
- 数据源 V2:允许将更新表示为删除和插入 SPARK-43775
- 允许 jdbc 方言覆盖用于创建表的查询 SPARK-41516
- SPJ:支持部分群集分发 SPARK-42038
- DSv2 允许 CTAS/RTAS 保留架构可为空性 SPARK-43390
- 添加 spark.sql.files.maxPartitionNum SPARK-44021
- 处理基于增量的源的更新命令 SPARK-43324
- 允许 V2 写入指示建议随机分区大小 SPARK-42779
- 支持 lz4raw 压缩编解码器用于镶木地板 SPARK-43273
- 阿夫罗:编写复杂的联合 SPARK-25050
- 使用用户提供的 JSON/CSV 数据源 SPARK-39280 格式加速时间戳类型推断
- Avro 支持由 Long SPARK-43901 支持的自定义十进制类型
- 当分区键不匹配但联接表达式兼容时,避免在存储分区联接中随机播放 SPARK-41413
- 将二进制文件更改为不受支持的数据类型 CSV 格式 SPARK-42237
- 允许 Avro 将联合类型转换为字段名称稳定的 SQL,类型为 SPARK-43333
- 使用 JSON/CSV 数据源中的旧格式加快时间戳类型推理 SPARK-39281
查询优化
- 子表达式消除支持快捷表达式 SPARK-42815
- 改进连接统计估计,如果一方可以保持唯一性 SPARK-39851
- 引入基于秩的过滤器的窗口组限制以优化top-k计算 SPARK-37099
- 修复优化规则 SPARK-44431 中空 IN(空列表)的行为
- 如果分区规范为空,则通过窗口推断并下推窗口限制 SPARK-41171
- 如果外部联接都是不同的聚合函数,请删除它们 SPARK-42583
- 折叠子查询中具有相同分区/顺序的两个相邻窗口 SPARK-42525
- 通过 Python UDF SPARK-42115 下推限制
- 优化筛选谓词的顺序 SPARK-40045
代码生成和查询执行
- 运行时过滤器应支持多级随机连接端作为过滤器创建端 SPARK-41674
- Codegen 支持 HiveSimpleUDF SPARK-42052
- Codegen 支持 HiveGenericUDF SPARK-42051
- 代码生成支持构建端外部洗牌哈希加入 SPARK-44060
- 实现to_csv函数的代码生成 (结构ToCsv) SPARK-42169
- 使 AQE 支持内存表扫描执行 SPARK-42101
- 支持左外联接构建左或右外联接构建右混接混接 SPARK-36612
- 尊重要求在 CTAS/RTAS SPARK-43088 中进行分发和订购
- 在广播联接流端应用的联接中的合并桶 SPARK-43107
- 使用联接 SPARK-44251 在完全外部的合并联接键上正确设置可为空
- 修复 IN 子查询列表查询可空性 SPARK-43413
其他值得注意的变化
- 使用联接 SPARK-43718 中的键正确设置为可为空
- 修复相关标量子查询 SPARK-43156 中的 COUNT(*) 为空错误
- 数据帧连接与外部联接应为不匹配的行返回空值 SPARK-37829
- 自动重命名冲突的元数据列 SPARK-42683
- 在面向用户的文档 SPARK-42706 中记录 Spark SQL 错误类
PySpark
特征
- 支持 Python sql() 中的位置参数 SPARK-44140
- 通过 sql() SPARK-41666 支持参数化 SQL
- 支持Python用户自定义表函数SPARK-43797
- 支持在运行时为 UDF 和熊猫函数 API 设置 Python 可执行文件 SPARK-43574
- 将 DataFrame.offset 添加到 PySpark SPARK-43213
- 在 pyspark.sql.dataframe.DataFrame 中实现 dir() 以包含列 SPARK-43270
- 添加选项以使用大型可变宽度矢量进行箭头 UDF 操作 SPARK-39979
- 使地图熊猫/地图箭支持屏障模式执行SPARK-42896
- 将 JobTag API 添加到 PySpark SparkContext SPARK-44194
- 支持 Python UDTF 在 Python SPARK-44380 中进行分析
- 在 pyspark.sql.types SPARK-43759 中公开时间戳NTZType
- 支持嵌套时间戳类型 SPARK-43545
- 支持从熊猫数据帧和toPandas 创建数据帧中的用户定义类型 [SPARK-43817]SPARK-43702
- 将描述符二进制选项添加到 Pyspark Protobuf API SPARK-43799
- 接受泛型元组作为熊猫UDF SPARK-43886的键入提示
- 添加array_prepend函数 SPARK-41233
- 添加断言数据帧相等效用函数 SPARK-44061
- 支持箭头优化的蟒蛇 UDTF SPARK-43964
- 允许 fp 近似相等的自定义精度 SPARK-44217
- 使断言架构相等 API 公开 SPARK-44216
- 支持 ps 的fill_value。SPARK-42094系列
- 支持从熊猫数据帧 SPARK-43473 创建数据帧中的结构类型
其他值得注意的变化
-
添加对 df[ 的自动完成支持 ] in pyspark.sql.dataframe.dataFrame [SPARK-43892] - 弃用并删除将在 pandas 2.0 中删除的 API [SPARK-42593]
- 使 Python 成为代码示例的第一个选项卡 - Spark SQL、数据帧和数据集指南 SPARK-42493
- 更新剩余的 Spark 文档代码示例以默认显示 Python SPARK-42642
- 创建箭头记录批处理时使用删除重复的字段名称 [SPARK-41971]
- 支持使用熊猫数据帧创建数据帧中的重复字段名称 [SPARK-43528]
- 使用系列创建数据帧时允许列参数 [SPARK-42194]
核心
- 计划合并在推送合并随机播放时完成地图阶段重试但没有正在运行的任务 SPARK-40082
- 引入用于 SQL 运算符执行的分区计算器 SPARK-43061
- 允许随机播放驱动程序组件声明随机播放数据是否可靠存储 SPARK-42689
- 为阶段添加最大尝试次数限制,以避免潜在的无限重试 SPARK-42577
- 支持使用静态火花会议SPARK-43782进行日志级别配置
- 优化百分位数堆 SPARK-42528
- 将原因参数添加到任务计划程序.取消任务 SPARK-42602
- 避免在迁移随机数据时丢失已停用的执行程序时重新运行不必要的任务 SPARK-41469
- 修复了使用 rdd 缓存 SPARK-41497 重试任务时的累加器计数不足的问题
- 默认情况下,将 RocksDB 用于 spark.history.store.hybridStore.diskBackend SPARK-42277
- 支持 spark.kubernetes.setSubmitTimeInDriver SPARK-43014
- 非命运共享缓存包装器番石榴缓存 SPARK-43300
- 提高 MapOutputTracker.updateMapOutput SPARK-43043 的性能
- 允许应用控制其元数据是否通过外部随机播放服务 SPARK-43179 保存在数据库中
- 端口执行器故障跟踪器从 YARN 上的 Spark 到 K8s SPARK-41210
- 参数化 KubernetesExecutor后端 SPARK-42764 中驱动程序 props 获取器的最大尝试次数
- 将 SPARK_DRIVER_POD_IP env 变量添加到执行程序 pod SPARK-42769
- 在执行程序 pod SPARK-43504 上挂载 hadoop 配置映射
结构化流
- 为 RocksDB 状态存储 SPARK-43120 添加对跟踪固定块内存使用情况的支持
- 添加 RocksDB 状态存储提供程序内存管理增强功能 SPARK-43311
- 引入 dropDuplicatesWithinWatermark SPARK-42931
- 引入新的回调 onQueryIdle() 到 StreamingQueryListener SPARK-43183
- 添加选项以跳过提交协调器作为 DSv2 源/接收器的流式写入 API 的一部分 SPARK-42968
- 引入新的回调“onQueryIdle”到StreamingQueryListener SPARK-43183
- 为 RocksDB 状态存储提供程序 SPARK-43421 实现基于更新日志的检查点
- 添加对流式处理有状态运算符 SPARK-42792 中使用的 RocksDB WRITE_FLUSH_BYTES的支持
- 新增支持流式传输 SPARK-42819 中对 RocksDB 的设置max_write_buffer_number和write_buffer_size
- RocksDB 状态存储锁采集应该在从inputRDD SPARK-42566获取输入迭代器后进行
- 在运营商中引入水印传播 SPARK-42376
- 清理 RocksDB 检查点目录 SPARK-42353 中的孤立 sst 和日志文件
- 展开查询终止事件以包含错误类(如果异常 SPARK-43482 中存在错误类)
毫升
- 支持使用深速SPARK-44264进行函数的分布式训练
- 用于 Spark3.5 的 sparkML 的基本接口:估算器/变压器/模型/评估器 SPARK-43516
- 使 MLv2(火花连接上的 ML)支持熊猫 >= 2.0 SPARK-43783
- 更新 MLv2 转换器接口 SPARK-43516
- 在分销商 SPARK-43097 之上实现的新 pyspark ML 逻辑回归估计器
- 添加分类器.获取数字类返回 SPARK-42526
- 编写深度速度分布式学习类深速火炬分发器 SPARK-44264
- 火花连接 SPARK-43981 上 ML 的基本保存/加载实现
- 改进逻辑回归模型节省 SPARK-43097
- 在火花连接 SPARK-43982 上实现 ML 的管道估算器
- 实现交叉验证器估算器 SPARK-43983
- 实施分类评估器 SPARK-44250
- 使 PyTorch Distributor 與 Spark Connect SPARK-42993 相容
用户界面
- 为 Spark Connect SPARK-44394 添加 Spark UI 页面
- 支持“执行程序”选项卡中的堆直方图列 SPARK-44153
- 在 UI 上显示每个失败查询的错误消息 SPARK-44367
- 在“执行程序”选项卡上显示“执行程序的添加/删除时间” SPARK-44309
构建和其他
- 删除 Python 3.7 支持 SPARK-43347
- 创建 PyArrow 最低版本到 4.0.0 SPARK-44183
- 支持 R 4.3.1 SPARK-43447 SPARK-44192
- 将 JobTag API 添加到 SparkR SparkContext SPARK-44195
- 将数学函数添加到 SparkR SPARK-44349
- 将镶木地板升级到 1.13.1 SPARK-43519
- 将 kubernetes-client 升级到 6.7.2 SPARK-42362 SPARK-42761 SPARK-42885 SPARK-43355 SPARK-43581 SPARK-43950 SPARK-43990
- 将 ASM 升级到 9.5 SPARK-43537 SPARK-43588
- 将 rocksdbjni 升级到 8.3.2 火花-41569 火花-42718 火花-43007 火花-43436 火花-44256
- 将网络升级到 4.1.93 火花-42218 火花-42417 火花-42487 火花-43609 火花-44128
- 将 zstd-jni 升级到 1.5.5-5 火花-42409 火花-42625 火花-43080 火花-43294 火花-43737 火花-43994 火花-44465
- 升级删除向导指标 4.2.19 SPARK-42654 SPARK-43738 SPARK-44296
- 将 gcs 连接器升级到 2.2.14 SPARK-42888 SPARK-43842
- 将公共加密升级到 1.2.0 SPARK-42488
- 将 scala-parser-combinators 从 2.1.1 升级到 2.2.0 SPARK-42489
- 将 protobuf-java 升级到 3.23.4 SPARK-41711 SPARK-42490 SPARK-42798 SPARK-43899 SPARK-44382
- 将通用编解码器升级到 1.16.0 SPARK-44151
- 将卡夫卡升级到 3.4.1 SPARK-42396 SPARK-44181
- 将咆哮位图升级到 0.9.45 SPARK-42385 SPARK-43495 SPARK-44221
- 将 ORC 更新到 1.9.0 火花-42820 火花-44053 火花-44231
- 升级到 Avro 1.11.2 SPARK-44277
- 将公共压缩升级到 1.23.0 SPARK-43102
- 将乔达时间从 2.12.2 升级到 2.12.5 SPARK-43008
- 将 snappy-java 升级到 1.1.10.3 SPARK-42242 SPARK-43758 SPARK-44070 SPARK-44415 SPARK-44513
- 将 mysql-connector-java 从 8.0.31 升级到 8.0.32 SPARK-42717
- 将阿帕奇箭头升级到 12.0.1 SPARK-42161 SPARK-43446 SPARK-44094
- 将 commons-io 升级到 2.12.0 SPARK-43739
- 将 Apache commons-io 升级到 2.13.0 SPARK-43739 SPARK-44028
- 将 FasterXML 杰克逊升级到 2.15.2 SPARK-42354 SPARK-43774 SPARK-43904
- 将 log4j2 升级到 2.20.0 SPARK-42536
- 将 slf4j 升级到 2.0.7 SPARK-42871
- 在发布 Dockerfile SPARK-42524 中升级 numpy 和熊猫
- 将球衣升级到 2.40 SPARK-44316
- 将 H2 从 2.1.214 升级到 2.2.220 SPARK-44393
- 将选项器升级到 ^0.9.3 SPARK-44279
- 将 bcprov-jdk15on 和 bcpkix-jdk15on 升级到 1.70 SPARK-44441
- 将 mlflow 升级到 2.3.1 SPARK-43344
- 将 Tink 升级到 1.9.0 SPARK-42780
- 将消音器升级到 1.7.13 SPARK-41787 SPARK-44031
- 将菊石升级到 2.5.9 SPARK-44041
- 将 Scala 升级到 2.12.18 SPARK-43832
- 将 org.scalatestplus:selenium-4-4 升级至 org.scalatestplus:Selenium-4-7 SPARK-41587
- 升级迷你匹配到 3.1.2 SPARK-41634
- 将 sbt 程序集从 2.0.0 升级到 2.1.0 SPARK-41704
- 将 maven-checkstyle-plugin 从 3.1.2 更新到 3.2.0 SPARK-41714
- 将 dev.ludovic.netlib 升级到 3.0.3 SPARK-41750
- 将配置单元存储 API 升级到 2.8.1 SPARK-41798
- 将 Apache httpcore 升级到 4.4.16 SPARK-41802
- 将码头升级到 9.4.52.v20230823 SPARK-45052
- 将压缩 lzf 升级到 1.1.2 SPARK-42274
移除、行为更改和弃用
即将删除
以下功能将在下一个 Spark 主要版本中删除
- 支持Java 8和Java 11,支持的最低Java版本将是Java 17
- 支持 Scala 2.12,支持的最低 Scala 版本将是 2.13