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 应该忽略前一批次中最近创建的 PVC
  • [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 URI
  • [SPARK-40819]: Parquet INT64 (TIMESTAMP(NANOS,true)) 现在抛出 Illegal Parquet type 异常,而不是自动转换为 LongType
  • [SPARK-40829]: 在 CREATE TABLE LIKE view 中,STORED AS serde 不起作用
  • [SPARK-40851]: 使用最新 Java 8/11/17 时,TimestampFormatter 行为发生变化
  • [SPARK-40869]: KubernetesConf.getResourceNamePrefix 创建无效的名称前缀
  • [SPARK-40874]: 修复启用加密时 Python UDF 中的广播
  • [SPARK-40902]: 在测试中快速向 Mesos 调度器提交驱动程序会导致驱动程序被删除
  • [SPARK-40918]: 使用 _metadata 时,WSCG.isTooManyFields 的 ParquetFileFormat 和 FileSourceScanExec 在 # 列方面不匹配
  • [SPARK-40924]: 当输入具有不均匀的符号数时,Unhex 函数工作不正确
  • [SPARK-40932]: Barrier: allGather 的消息将被以下 barrier API 覆盖
  • [SPARK-40963]: ExtractGenerator 在新的 Project 中设置不正确的 nullability
  • [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]: Anti-join 不能被推送到具有不明确谓词的聚合之下
  • [SPARK-41187]: [Core] 当发生 ExecutorLost 时,AppStatusListener 中的 LiveExecutor MemoryLeak
  • [SPARK-41188]: 默认情况下,将 executorEnv OMP_NUM_THREADS 设置为 spark 执行器 JVM 进程的 spark.task.cpus
  • [SPARK-41254]: YarnAllocator.rpIdToYarnResource 映射未正确更新
  • [SPARK-41327]: 通过切换 On/OffHeapStorageMemory 信息来修复 SparkStatusTracker.getExecutorInfos
  • [SPARK-41339]: RocksDB 状态存储 WriteBatch 不会清理本地内存
  • [SPARK-41350]: 允许在使用子查询别名后简单名称访问使用 join 隐藏的列
  • [SPARK-41365]: 对于某些 yarn 版本中的代理,Stages UI 页面无法加载
  • [SPARK-41375]: 避免空的最新 KafkaSourceOffset
  • [SPARK-41376]: 执行器 netty 直接内存检查应尊重 spark.shuffle.io.preferDirectBufs
  • [SPARK-41379]: 在 PySpark 中,foreachBatch sink 的用户函数中 DataFrame 中的 spark 会话不一致
  • [SPARK-41385]: 在 K8s 模块中替换已弃用的 .newInstance()
  • [SPARK-41395]: 当与十进制数据一起使用时,InterpretedMutableProjection 可能会损坏不安全的缓冲区
  • [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]: 当传递 NULL 时,DECODE 函数返回错误的结果
  • [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 Backport: SPARK-41344 读取 V2 数据源会掩盖底层错误
  • [SPARK-42259]: ResolveGroupingAnalytics 应该处理 Python UDAF
  • [SPARK-42344]: CONFIG_MAP_MAXSIZE 的默认大小不应大于 1048576
  • [SPARK-42346]: 带有 UNION ALL 的 distinct(count colname) 导致查询分析器错误
  • [SPARK-38277]: 在 RocksDB 状态存储提交后清除写入批次
  • [SPARK-40913]: 固定 pytest==7.1.3
  • [SPARK-41089]: 重新定位 Netty 本地 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 中重复的次数。随机数据测试
  • [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]: 不要通过使用 percent_rank 的窗口下推限制
  • [SPARK-38717]: 处理 Hive 的存储桶规范案例,保持行为一致
  • [SPARK-38796]: 更新 to_number 和 try_to_number 函数以允许使用正数 PR
  • [SPARK-39184]: 处理日期和时间戳序列中尺寸不足的结果数组
  • [SPARK-39200]: 使 Fallback Storage 对内容执行 readFully
  • [SPARK-39340]: DS v2 聚合下推应允许在顶层列的名称中使用点
  • [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 命令遇到找不到的错误 window 定义问题
  • [SPARK-39570]: 内联表应允许带有别名的表达式
  • [SPARK-39614]: K8s pod 名称遵循 DNS 子域名称规则
  • [SPARK-39633]: 支持使用 Dataframe 选项进行 TimeTravel 的秒级时间戳
  • [SPARK-39647]: 在注册 BlockManager 之前向 ESS 注册执行器
  • [SPARK-39650]: 修复具有向后兼容性的流式去重中错误的值 schema
  • [SPARK-39656]: 修复 DescribeNamespaceExec 中的错误命名空间
  • [SPARK-39657]: YARN AM 客户端应调用非静态的 setTokensConf 方法
  • [SPARK-39672]: 修复在相关子查询中过滤之前删除项目
  • [SPARK-39758]: 修复正则表达式函数在无效模式上的 NPE
  • [SPARK-39775]: 解析 Avro schema 时禁用验证默认值
  • [SPARK-39806]: 访问分区表上的 _metadata 可能会使查询崩溃
  • [SPARK-39833]: 在 DSv1 中禁用 Parquet 列索引以修复重叠分区和数据列的情况下的正确性问题
  • [SPARK-39835]: 修复 EliminateSorts 删除本地排序下方的全局排序
  • [SPARK-39839]: 在 UnsafeRow 结构完整性检查中,处理具有非零 offsetAndSize 的空 variable-length Decimal 的特殊情况
  • [SPARK-39847]: 修复 RocksDBLoader.loadLibrary() 中调用者线程中断时的竞争条件
  • [SPARK-39857]: V2ExpressionBuilder 对 In 谓词使用错误的 LiteralValue 数据类型
  • [SPARK-39867]: 全局限制不应继承 OrderPreservingUnaryNode
  • [SPARK-39887]: RemoveRedundantAliases 应保留使 projection 节点输出唯一的别名
  • [SPARK-39896]: 当 In/InSet 的 literal 下转型失败时,UnwrapCastInBinaryComparison 应工作
  • [SPARK-39900]: 解决二进制格式谓词下推中的部分或否定条件
  • [SPARK-39911]: 优化全局排序为 RepartitionByExpression
  • [SPARK-39915]: Dataset.repartition(N) 可能不会创建 N 个分区 Non-AQE 部分
  • [SPARK-39915]: 确保输出分区在 AQE 中是用户指定的
  • [SPARK-39932]: WindowExec 应该清除最终的分区缓冲区
  • [SPARK-39951]: 更新 Parquet V2 列式检查以用于嵌套字段
  • [SPARK-39952]: SaveIntoDataSourceCommand 应重新缓存结果关系
  • [SPARK-39962]: 当 group 属性为空时应用 projection
  • [SPARK-39976]: ArrayIntersect 应该正确处理左表达式中的 null
  • [SPARK-40002]: 不要使用 ntile 将 limit 下推到 window 中
  • [SPARK-40065]: 将 ConfigMap 挂载到具有非默认配置文件的执行器上
  • [SPARK-40079]: 为空输入情况添加 Imputer inputCols 验证
  • [SPARK-40089]: 修复某些 Decimal 类型的排序
  • [SPARK-40117]: 在 DataFrameWriterV2.overwrite 中将条件转换为 java
  • [SPARK-40121]: 初始化用于 Python UDF 的 projection
  • [SPARK-40132]: 将 rawPredictionCol 恢复到 MultilayerPerceptronClassifier.setParams
  • [SPARK-40149]: 通过 Project 传播元数据列
  • [SPARK-40152]: 修复 split_part 代码生成编译问题
  • [SPARK-40169]: 不要下推与数据 schema 无关的 Parquet 过滤器
  • [SPARK-40212]: SparkSQL castPartValue 未正确处理 byte、short 或 float
  • [SPARK-40213]: 支持 Latin-1 字符的 ASCII 值转换
  • [SPARK-40218]: GROUPING SETS 应保留分组列
  • [SPARK-40228]: 如果子表达式不是 cheap expression,则不要简化 multiLike
  • [SPARK-40247]: 修复 BitSet 相等性检查
  • [SPARK-40280]: 添加对带注释的 int 和 long 的 parquet 下推的支持
  • [SPARK-40297]: CTE 主体中嵌套的 CTE 外部引用无法解析
  • [SPARK-40362]: 修复 BinaryComparison 规范化
  • [SPARK-40380]: 修复 InvokeLike 的常量折叠以避免计划中嵌入的非序列化字面量
  • [SPARK-40385]: 修复伴生对象构造函数的解释路径
  • [SPARK-40389]: 如果强制转换可能溢出,则 Decimals 无法作为整数类型向上转型
  • [SPARK-40468]: 当选择 _corrupt_record 时,修复 CSV 中的列裁剪
  • [SPARK-40508]: 将未知分区视为 UnknownPartitioning
  • [SPARK-40535]: 修复了如果输入行为空,则不会创建 AggregatingAccumulator 的缓冲区
  • [SPARK-40562]: 添加 spark.sql.legacy.groupingIdWithAppendedUserGroupBy
  • [SPARK-40612]: 修复非 YARN 资源管理器上用于委托令牌续订的 principal
  • [SPARK-40660]: 切换到 XORShiftRandom 来分配元素
  • [SPARK-40703]: 在 SinglePartition 上引入 shuffle 以提高并行性

依赖项更改

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

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

我们要感谢所有社区成员为此版本贡献补丁。


Spark 新闻存档

最新消息

存档