Spark 3.5.2 版本发布

Spark 3.5.2 是第二个维护版本,包含安全和正确性修复。此版本基于 Spark 的 branch-3.5 维护分支。我们强烈建议所有 3.5 用户升级到此稳定版本。

显著变化

  • [SPARK-45988]: 修复 pyspark.pandas.tests.computation.test_apply_func 在 Python 3.11 中的问题
  • [SPARK-45989]: 修复 pyspark.pandas.tests.connect.computation.test_parity_apply_func 在 Python 3.11 中的问题
  • [SPARK-46411]: 改为使用 bcprov/bcpkix-jdk18on 进行测试
  • [SPARK-47368]: 移除 ParquetRowConverter 中 inferTimestampNTZ 配置检查
  • [SPARK-47370]: 添加迁移文档:Parquet 文件上的 TimestampNTZ 类型推断
  • [SPARK-47435]: SPARK-45561 导致 MySQL 无符号 tinyint 溢出
  • [SPARK-47440]: SQLServer 不支持二进制比较中的 LIKE 运算符
  • [SPARK-47473]: 转换 PostgreSQL INFINITIES 时间戳的正确性问题
  • [SPARK-47494]: 添加关于 Spark 3.3 以来 Parquet 时间戳推断行为变化的迁移文档
  • [SPARK-47537]: 使用 MySQL Connector/J 连接 MySQL 数据库,而非 MariaDB Connector/J
  • [SPARK-47666]: 修复将 MySQL 位数组读取为 LongType 时出现的 NPE
  • [SPARK-47770]: 修复 GenerateMIMAIgnore.isPackagePrivateModule 返回 false 而不是失败的问题
  • [SPARK-47774]: 从 MimaExcludes 中移除冗余规则
  • [SPARK-47847]: 废弃 spark.network.remoteReadNioBufferConversion
  • [SPARK-48016]: 修复 try_divide 函数处理小数时的错误
  • [SPARK-48068]: mypy 应该有 --python-executable 参数
  • [SPARK-48083]: session.copyFromLocalToFs 在 3.5 客户端 <> 4.0 服务器环境下失败
  • [SPARK-48084]: pyspark.ml.connect.evaluation 在 3.5 客户端 <> 4.0 服务器环境下无法工作
  • [SPARK-48086]: 客户端和服务器上 Arrow 版本不同
  • [SPARK-48087]: Python UDTF 在 3.5 客户端 <> 4.0 服务器环境下不兼容
  • [SPARK-48088]: 跳过在 3.5 客户端 <> 4.0 服务器环境下失败的测试
  • [SPARK-48089]: Streaming 查询监听器在 3.5 客户端 <> 4.0 服务器环境下无法工作
  • [SPARK-48090]: Streaming 异常捕获在 3.5 客户端 <> 4.0 服务器环境下失败
  • [SPARK-48109]: 仅在 kubernetes 模块更改时启用 k8s-integration-tests
  • [SPARK-48116]: 仅在 PR 构建器和每日 Python CI 中运行 pyspark-pandas*
  • [SPARK-48132]: 仅在 PR 构建器和每日 CI 中运行 k8s-integration-tests
  • [SPARK-48133]: 仅在 PR 构建器和每日 CI 中运行 sparkr
  • [SPARK-48138]: 禁用不稳定的 SparkSessionE2ESuite.interrupt tag 测试
  • [SPARK-48167]: 跳过 SPARK-46122 引起的已知行为变化
  • [SPARK-48178]: 仅在需要时运行 branch-3.5 的 build/scala-213/java-11-17 任务
  • [SPARK-48192]: 在派生仓库中启用 TPC-DS 和 docker 测试
  • [SPARK-48930]: 通过包含 accesskey 模式来编辑 awsAccessKeyId
  • [SPARK-49054]: 列默认值应支持 current_* 函数
  • [SPARK-47305]: 当用 LocalRelation 替换 Filter 的子节点时,PruneFilters 错误地标记 isStreaming 标志
  • [SPARK-47307]: Spark 3.3 生成无效的 base64
  • [SPARK-47318]: AuthEngine 密钥交换需要额外的 KDF 轮次
  • [SPARK-47385]: Tuple 编码器在 Option 输入时产生错误结果
  • [SPARK-47398]: AQE 不允许扩展 InMemoryTableScanExec
  • [SPARK-47434]: 流式统计链接重定向导致 302 错误
  • [SPARK-47455]: 修复 SparkBuild.scala 中 scalaStyleOnCompileConfig 的资源处理问题
  • [SPARK-47463]: iceberg 数据源的 if 表达式过滤器下推时发生错误。
  • [SPARK-47503]: Spark 历史服务器无法显示引号中命名的缓存 JDBC 关系的查询
  • [SPARK-47507]: 将 ORC 升级到 1.9.3
  • [SPARK-47521]: 从外部存储读取 shuffle 数据时使用 Utils.tryWithResource
  • [SPARK-47561]: 修复关于 Alias 的分析器规则顺序问题
  • [SPARK-47633]: 使用带有连接条件的 JOIN LATERAL 的查询出现缓存未命中
  • [SPARK-47636]: 在 K8s Dockerfile 中使用 Java 17 而非 17-jre 镜像
  • [SPARK-47646]: try_to_number 在输入格式错误时抛出 NPE
  • [SPARK-47676]: 清理已移除的 VersionsSuite 引用
  • [SPARK-47762]: 将 pyspark.sql.connect.protobuf 添加到 setup.py 中
  • [SPARK-47824]: pyspark.pandas.series.asof 中的非确定性
  • [SPARK-47828]: DataFrameWriterV2.overwrite 因无效计划而失败
  • [SPARK-47840]: 移除跨流式聚合/连接节点的折叠传播
  • [SPARK-47895]: group by all 应该是幂等的
  • [SPARK-47904]: 使用 enableStableIdentifiersForUnionType 时在 Avro 模式中保留大小写
  • [SPARK-47910]: 使用 zstd 压缩中断 shuffle 写入时出现内存泄漏
  • [SPARK-47921]: 修复 ExecuteHolder 中的 ExecuteJobTag 创建
  • [SPARK-47927]: UDF 中未遵守连接后的可空性
  • [SPARK-48019]: 带有字典和空值的 ColumnVectors 未正确读取/复制
  • [SPARK-48037]: SortShuffleWriter 缺少与 shuffle 写入相关的指标,可能导致数据不准确
  • [SPARK-48105]: 修复 HDFS 状态存储在卸载和快照同时发生时的数据损坏问题
  • [SPARK-48128]: BitwiseCount / bit_count 为布尔输入生成的代码编译失败
  • [SPARK-48172]: 修复 JDBCDialects 中的转义问题
  • [SPARK-48173]: CheckAnalysis 应该查看整个查询计划
  • [SPARK-48179]: 将 nbsphinx 固定到 0.9.3
  • [SPARK-48184]: 始终在客户端设置 dataframe.sample 的种子
  • [SPARK-48197]: 避免无效 lambda 函数的断言错误
  • [SPARK-48237]: 执行 test-dependencies.sh 后,应删除 dev/pr-deps 目录
  • [SPARK-48241]: 字符/变长字符类型列的 CSV 解析失败
  • [SPARK-48248]: 修复嵌套数组以遵守 inferArrayTypeFromFirstElement 的旧版配置
  • [SPARK-48265]: 推断窗口组限制批处理应进行常量折叠
  • [SPARK-48273]: PlanWithUnresolvedIdentifier 的延迟重写
  • [SPARK-48286]: 在 structField 到 v2 列转换中,分析 'exists' 默认表达式而非 'current' 默认表达式
  • [SPARK-48294]: 使 nestedTypeMissingElementTypeError 不区分大小写
  • [SPARK-48297]: 字符/变长字符在 TRANSFORM 子句中中断
  • [SPARK-48237]: 执行 test-dependencies.sh 后,应删除 dev/pr-deps 目录
  • [SPARK-48241]: 字符/变长字符类型列的 CSV 解析失败
  • [SPARK-48248]: 修复嵌套数组以遵守 inferArrayTypeFromFirstElement 的旧版配置
  • [SPARK-48265]: 推断窗口组限制批处理应进行常量折叠
  • [SPARK-48273]: PlanWithUnresolvedIdentifier 的延迟重写
  • [SPARK-48286]: 在 structField 到 v2 列转换中,分析 'exists' 默认表达式而非 'current' 默认表达式
  • [SPARK-48294]: 使 nestedTypeMissingElementTypeError 不区分大小写
  • [SPARK-48297]: 字符/变长字符在 TRANSFORM 子句中中断
  • [SPARK-48308]: 统一在 FileSourceStrategy 中获取不带分区列的数据模式
  • [SPARK-48428]: 由于嵌套列别名导致的 IllegalStateException
  • [SPARK-48481]: OptimizeOneRowPlan 不应影响流式 DataFrame
  • [SPARK-48484]: V2Write 对不同的任务尝试使用相同的 TaskAttemptId
  • [SPARK-48498]: 始终在谓词中进行字符填充
  • [SPARK-48608]: Spark 3.5:在 defaultValueNotConstantError 不是 org.apache.spark.sql.errors.QueryCompilationErrors 对象的成员时构建失败
  • [SPARK-48642]: 因溢出时终止任务导致错误报告 SparkOutOfMemoryError
  • [SPARK-48666]: 如果过滤器包含不可评估表达式,则不应下推
  • [SPARK-48709]: DataSourceV2 CTAS 的 Varchar 解析不匹配
  • [SPARK-48719]: 带有 NULL 元组的 regr_slope 和 regr_intercept 聚合结果错误
  • [SPARK-48791]: 由于使用 CopyOnWriteArrayList 的累加器注册开销导致性能下降
  • [SPARK-48843]: GlobalLimit/BindParameters 的无限循环
  • [SPARK-48845]: GenericUDF 无法从子 UDF 捕获异常
  • [SPARK-48863]: ClassCastException:在启用“spark.sql.json.enablePartialResults”解析 JSON 时,`org.apache.spark.unsafe.types.UTF8String` 类型无法转换为 `org.apache.spark.sql.catalyst.util.ArrayData` 类型
  • [SPARK-48871]: 修复 CheckAnalysis 中的 INVALID_NON_DETERMINISTIC_EXPRESSIONS 验证
  • [SPARK-48921]: 子查询中的 ScalaUDF 应通过分析器运行
  • [SPARK-48991]: FileStreamSink.hasMetadata 处理无效路径
  • [SPARK-49000]: 聚合带有 DISTINCT 时,处理字面量会产生错误结果
  • [SPARK-49005]: 使用 17-jammy 而非 17 来避免 Python 3.12
  • [SPARK-49065]: 旧版格式化程序/解析器中的重置必须支持非 JVM 默认时区
  • [SPARK-49094]: ignoreCorruptFiles 文件源选项对 ORC 格式部分支持
  • [SPARK-49099]: 重构 CatalogManager.setCurrentNamespace
  • [SPARK-45587]: 在 GitHub Action 构建任务中跳过 UNIDOC 和 MIMA
  • [SPARK-45593]: 从运行 spark-sql 的主代码构建可运行分发时,会抛出错误“java.lang.ClassNotFoundException: org.sparkproject.guava.util.concurrent.internal.InternalFutureFailureAccess”
  • [SPARK-47172]: 将传输块密码模式升级到 GCM
  • [SPARK-47299]: 在 PySpark 文档不同版本的下拉列表中使用相同的 versions.json
  • [SPARK-47734]: 通过停止流式查询来修复不稳定的 pyspark.sql.dataframe.DataFrame.writeStream doctest
  • [SPARK-47825]: 废弃 KinesisTestUtilsWriteInputFormatTestDataGenerator
  • [SPARK-47897]: Scala 2.12 中 ExpressionSet 性能下降
  • [SPARK-48081]: 修复 NTile.checkInputDataTypes() 中参数不可折叠或类型错误时出现的 ClassCastException
  • [SPARK-48292]: 还原 [SPARK-39195][SQL] Spark OutputCommitCoordinator 应在提交文件与任务状态不一致时中止阶段
  • [SPARK-48391]: 在 TaskMetrics 中使用 addAll 而非 add 函数以加速
  • [SPARK-48424]: 让 dev/is-changed.py 在失败时返回 true
  • [SPARK-48586]: 通过在 load() 中对 RocksDBFileManager 中的文件映射进行深层复制来移除 doMaintenance() 中的锁获取
  • [SPARK-48610]: 移除 ExplainUtils.processPlan 同步
  • [SPARK-48806]: url_decode 失败时传递实际异常
  • [SPARK-47481]: 修复 Python 代码检查器
  • [SPARK-48535]: 更新文档以记录连接 null 相关配置使用的警告
  • [SPARK-48934]: Python datetime 类型在 applyInPandasWithState 中设置超时时转换不正确

依赖项更改

您可以查阅 JIRA 获取详细更改

我们衷心感谢所有社区成员为本次版本发布贡献的补丁。


Spark 新闻存档