Spark 3.3.2 版本发布

Spark 3.3.2 是一个维护版本,包含稳定性修复。此版本基于 Spark 的 branch-3.3 维护分支。我们强烈建议所有 3.3 用户升级到此稳定版本。

显著变化

  • [SPARK-38697]: 扩展 SparkSessionExtensions 以将规则注入 AQE 优化器
  • [SPARK-40872]: 当推送合并的 shuffle 块大小为零时,回退到原始 shuffle 块
  • [SPARK-41388]: getReusablePVCs 应忽略上一批次中最近创建的 PVCs
  • [SPARK-42071]: 将 scala.math.Ordering$Reverse 注册到 KyroSerializer
  • [SPARK-32380]: 当数据在 hbase 中时 sparksql 无法访问 hive 表
  • [SPARK-39404]: 如果 getBatch 在 DataFrame 中返回多个逻辑节点,则无法在流式传输中查询 _metadata
  • [SPARK-40493]: 还原 “[SPARK-33861][SQL] 简化谓词中的条件”
  • [SPARK-40588]: 分区写入和启用 AQE 时的排序问题
  • [SPARK-40817]: 在集群模式下,Kubernetes 上的 Spark 忽略远程 spark.jars URIs
  • [SPARK-40819]: Parquet INT64 (TIMESTAMP(NANOS,true)) 现在抛出非法 Parquet 类型,而不是自动转换为 LongType
  • [SPARK-40829]: CREATE TABLE LIKE 视图中的 STORED AS serde 不起作用
  • [SPARK-40851]: 使用最新 Java 8/11/17 时 TimestampFormatter 行为改变
  • [SPARK-40869]: KubernetesConf.getResourceNamePrefix 创建无效的名称前缀
  • [SPARK-40874]: 修复启用加密时 Python UDF 中的广播
  • [SPARK-40902]: 在测试中快速向 Mesos 调度器提交驱动程序会导致驱动程序丢失
  • [SPARK-40918]: 使用 _metadata 时,ParquetFileFormat 和 FileSourceScanExec 在 WSCG.isTooManyFields 中 # 列数不匹配
  • [SPARK-40924]: 当输入符号数量不均匀时 Unhex 函数工作不正确
  • [SPARK-40932]: Barrier: allGather 的消息将被后续的 barrier API 覆盖
  • [SPARK-40963]: ExtractGenerator 在新 Project 中设置了不正确的可空性
  • [SPARK-40987]: 删除块时避免创建目录,导致 DAGScheduler 不工作
  • [SPARK-41035]: 当文字在不同聚合中重用时,结果不正确或出现 NPE
  • [SPARK-41118]: 当格式为 null 时,to_number/try_to_number 抛出 NullPointerException
  • [SPARK-41144]: UnresolvedHint 不应导致查询失败
  • [SPARK-41151]: 保持内置文件 _metadata 列的可空值一致
  • [SPARK-41154]: 包含时间旅行规范的查询的关系缓存不正确
  • [SPARK-41162]: 反连接不得在具有模糊谓词的聚合下推
  • [SPARK-41187]: [Core] 当 ExecutorLost 发生时,AppStatusListener 中的 LiveExecutor MemoryLeak
  • [SPARK-41188]: 默认将 executorEnv OMP_NUM_THREADS 设置为 spark.task.cpus,用于 spark executor JVM 进程
  • [SPARK-41254]: YarnAllocator.rpIdToYarnResource 映射未正确更新
  • [SPARK-41327]: 修复 SparkStatusTracker.getExecutorInfos,通过切换 On/OffHeapStorageMemory 信息
  • [SPARK-41339]: RocksDB 状态存储 WriteBatch 不会清理本机内存
  • [SPARK-41350]: 允许在子查询别名后简单名称访问使用连接隐藏列
  • [SPARK-41365]: 在某些 yarn 版本中,代理的 Stages UI 页面无法加载
  • [SPARK-41375]: 避免空的最新 KafkaSourceOffset
  • [SPARK-41376]: Executor netty 直接内存检查应遵守 spark.shuffle.io.preferDirectBufs
  • [SPARK-41379]: PySpark 中 foreachBatch 接收器用户函数中 DataFrame 的 spark 会话不一致
  • [SPARK-41385]: 替换 K8s 模块中已弃用的 .newInstance()
  • [SPARK-41395]: InterpretedMutableProjection 在与 Decimal 数据一起使用时可能损坏不安全缓冲区
  • [SPARK-41448]: 使 FileBatchWriter 和 FileFormatWriter 中的 MR 作业 ID 保持一致
  • [SPARK-41458]: 正确转换 Yarn Shuffle Service 的 SPI 服务
  • [SPARK-41468]: 修复 EquivalentExpressions 中的 PlanExpression 处理
  • [SPARK-41522]: GA 依赖项测试失败
  • [SPARK-41535]: InterpretedUnsafeProjection 和 InterpretedMutableProjection 在与日历间隔数据一起使用时可能损坏不安全缓冲区
  • [SPARK-41554]: Decimal.changePrecision 产生 ArrayIndexOutOfBoundsException
  • [SPARK-41668]: DECODE 函数在传入 NULL 时返回错误结果
  • [SPARK-41732]: 会话窗口: 分析规则“SessionWindowing”不应用基于树模式的剪枝
  • [SPARK-41989]: PYARROW_IGNORE_TIMEZONE 警告可能破坏应用程序日志设置
  • [SPARK-42084]: 避免泄漏仅限定访问的限制
  • [SPARK-42090]: 在 RetryingBlockTransferor 中引入 sasl 重试计数
  • [SPARK-42134]: 修复 getPartitionFiltersAndDataFilters() 以处理没有引用属性的过滤器
  • [SPARK-42157]: spark.scheduler.mode=FAIR 应该提供 FAIR 调度器
  • [SPARK-42176]: 将布尔值转换为时间戳时,由于 ClassCastException 而失败
  • [SPARK-42188]: 强制 SBT protobuf 版本与分支 3.2 和 3.3 上的 Maven 匹配
  • [SPARK-42201]: build/sbt 应该允许 SBT_OPTS 覆盖 JVM 内存设置
  • [SPARK-42222]: Spark 3.3 反向移植: SPARK-41344 读取 V2 数据源时掩盖底层错误
  • [SPARK-42259]: ResolveGroupingAnalytics 应该处理 Python UDAF
  • [SPARK-42344]: CONFIG_MAP_MAXSIZE 的默认大小不应大于 1048576
  • [SPARK-42346]: distinct(count colname) 与 UNION ALL 导致查询分析器错误
  • [SPARK-38277]: RocksDB 状态存储提交后清除写批次
  • [SPARK-40913]: 固定 pytest==7.1.3
  • [SPARK-41089]: 重定位 Netty native arm64 库
  • [SPARK-41360]: 如果执行器已丢失,避免 BlockManager 重新注册
  • [SPARK-41476]: 防止 README.md 触发 CI
  • [SPARK-41541]: 修复 SQLShuffleWriteMetricsReporter.decRecordsWritten() 中错误的子调用
  • [SPARK-41962]: 更新类 SpecificParquetRecordReaderBase 中 scala 包的导入顺序
  • [SPARK-42230]: 通过跳过未更改的 PySpark 和 SparkR 文档来改进 lint 作业
  • [SPARK-41863]: 如果命令不可用,则跳过 flake8 测试
  • [SPARK-41864]: 修复 mypy linter 错误
  • [SPARK-42110]: 减少 ParquetDeltaEncodingSuite.random data test 中的重复次数
  • [SPARK-41415]: SASL 请求重试
  • [SPARK-41538]: 元数据列应附加到项目列表的末尾
  • [SPARK-40983]: 删除 Parquet 压缩编解码器中对 zstd 的 Hadoop 需求提及
  • [SPARK-41185]: 从文档中删除 YuniKorn 的 ARM 限制

  • [SPARK-35542]: 修复: 使用参数 splitsArray、inputCols 和 outputCols 为多列创建的 Bucketizer 在保存后无法加载
  • [SPARK-36057]: SPIP: 支持定制 Kubernetes 调度器
  • [SPARK-38034]: 优化 TransposeWindow 规则
  • [SPARK-38404]: 改进嵌套 CTE 引用外部 CTE 时的 CTE 解析
  • [SPARK-38614]: 不要将 limit 推送到使用 percent_rank 的窗口之下
  • [SPARK-38717]: 处理 Hive 的 bucket 规范案例,保留行为
  • [SPARK-38796]: 更新 to_number 和 try_to_number 函数以允许带有正数的 PR
  • [SPARK-39184]: 处理日期和时间戳序列中结果数组过小的情况
  • [SPARK-39200]: 使 Fallback Storage 对内容进行 readFully
  • [SPARK-39340]: DS v2 agg pushdown 应允许顶层列名中包含点
  • [SPARK-39355]: 单列使用引号构造 UnresolvedAttribute
  • [SPARK-39419]: 修复 ArraySort 在比较器返回 null 时抛出异常
  • [SPARK-39447]: 避免 AdaptiveSparkPlanExec.doExecuteBroadcast 中的 AssertionError
  • [SPARK-39476]: 在将 Long 转换为 Float/Double 或将 Integer 转换为 Float 时,禁用 Unwrap cast 优化
  • [SPARK-39548]: 带有 window 子句查询的 CreateView 命令遇到错误的窗口定义未找到问题
  • [SPARK-39570]: 内联表应允许带别名的表达式
  • [SPARK-39614]: K8s pod 名称遵循 DNS 子域名规则
  • [SPARK-39633]: 支持使用 DataFrame 选项进行时间旅行时以秒为单位的时间戳
  • [SPARK-39647]: 在注册 BlockManager 之前,将执行器注册到 ESS
  • [SPARK-39650]: 修复流式去重中值模式错误且向后兼容
  • [SPARK-39656]: 修复 DescribeNamespaceExec 中错误的命名空间
  • [SPARK-39657]: YARN AM 客户端应调用非静态 setTokensConf 方法
  • [SPARK-39672]: 修复带有相关子查询的过滤器之前删除 project
  • [SPARK-39758]: 修复 regexp 函数在无效模式下产生的 NPE
  • [SPARK-39775]: 解析 Avro 模式时禁用默认值验证
  • [SPARK-39806]: 访问分区表上的 _metadata 可能导致查询崩溃
  • [SPARK-39833]: 禁用 DSv1 中的 Parquet 列索引以修复分区列和数据列重叠情况下的正确性问题
  • [SPARK-39835]: 修复 EliminateSorts 删除局部排序下的全局排序
  • [SPARK-39839]: 处理 UnsafeRow 结构完整性检查中,null 变长 Decimal 具有非零 offsetAndSize 的特殊情况
  • [SPARK-39847]: 修复 RocksDBLoader.loadLibrary() 中调用线程被中断时的竞态条件
  • [SPARK-39857]: V2ExpressionBuilder 为 In 谓词使用错误的 LiteralValue 数据类型
  • [SPARK-39867]: 全局限制不应继承 OrderPreservingUnaryNode
  • [SPARK-39887]: RemoveRedundantAliases 应该保留使投影节点输出唯一的别名
  • [SPARK-39896]: UnwrapCastInBinaryComparison 应该在 In/InSet 的文字向下转换失败时工作
  • [SPARK-39900]: 处理二进制格式谓词下推中的部分或否定条件
  • [SPARK-39911]: 优化全局排序到 RepartitionByExpression
  • [SPARK-39915]: Dataset.repartition(N) 可能不会创建 N 个非 AQE 分区
  • [SPARK-39915]: 确保 AQE 中的输出分区是用户指定的
  • [SPARK-39932]: WindowExec 应清除最终分区缓冲区
  • [SPARK-39951]: 更新 Parquet V2 嵌套字段的列式检查
  • [SPARK-39952]: SaveIntoDataSourceCommand 应重新缓存结果关系
  • [SPARK-39962]: 当组属性为空时应用投影
  • [SPARK-39976]: ArrayIntersect 应该正确处理左表达式中的 null
  • [SPARK-40002]: 不要将 limit 推送到使用 ntile 的窗口之下
  • [SPARK-40065]: 在非默认配置文件上也挂载 ConfigMap 到执行器
  • [SPARK-40079]: 添加 Imputer inputCols 空输入情况验证
  • [SPARK-40089]: 修复某些 Decimal 类型的排序问题
  • [SPARK-40117]: 在 DataFrameWriterV2.overwrite 中将条件转换为 java
  • [SPARK-40121]: 初始化用于 Python UDF 的投影
  • [SPARK-40132]: 恢复 MultilayerPerceptronClassifier.setParams 中的 rawPredictionCol
  • [SPARK-40149]: 通过 Project 传播元数据列
  • [SPARK-40152]: 修复 split_part codegen 编译问题
  • [SPARK-40169]: 不要下推与数据模式无关的 Parquet 过滤器
  • [SPARK-40212]: SparkSQL castPartValue 未正确处理字节、短整型或浮点型
  • [SPARK-40213]: 支持 Latin-1 字符的 ASCII 值转换
  • [SPARK-40218]: GROUPING SETS 应保留分组列
  • [SPARK-40228]: 如果子表达式不是廉价表达式,则不要简化 multiLike
  • [SPARK-40247]: 修复 BitSet 相等性检查
  • [SPARK-40280]: 添加对带注释的 int 和 long 的 parquet 下推支持
  • [SPARK-40297]: 嵌套在 CTE 主体中的 CTE 外部引用无法解析
  • [SPARK-40362]: 修复 BinaryComparison 规范化
  • [SPARK-40380]: 修复 InvokeLike 的常量折叠,以避免计划中嵌入不可序列化的文字
  • [SPARK-40385]: 修复伴生对象构造函数的解释路径
  • [SPARK-40389]: 如果转换可能溢出,Decimal 无法向上转换为整型
  • [SPARK-40468]: 修复 CSV 中选择 _corrupt_record 时的列剪枝问题
  • [SPARK-40508]: 将未知分区视为 UnknownPartitioning
  • [SPARK-40535]: 修复 AggregatingAccumulator 的缓冲区在输入行为空时不会创建的 bug
  • [SPARK-40562]: 添加 spark.sql.legacy.groupingIdWithAppendedUserGroupBy
  • [SPARK-40612]: 修复非 YARN 资源管理器上用于委托令牌续订的主体
  • [SPARK-40660]: 切换到 XORShiftRandom 以分布元素
  • [SPARK-40703]: 在 SinglePartition 上引入 shuffle 以提高并行度

依赖项变更

尽管这是一个维护版本,但我们在此版本中仍升级了一些依赖项,它们是:

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

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


Spark 新闻存档