Spark 3.2.2 版本发布

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

值得注意的更改

  • [SPARK-37290]: 不确定函数导致指数级规划时间
  • [SPARK-37544]: 带月份间隔的日期序列产生不正确的结果
  • [SPARK-37643]: 当 charVarcharAsString 为 true 时,char 数据类型分区表查询不正确
  • [SPARK-37670]: 支持对去重 CTE 的谓词下推和列剪裁
  • [SPARK-37675]: 防止在 shuffle 结束后覆盖 push shuffle 合并的文件
  • [SPARK-37793]: 无效的 LocalMergedBlockData 导致任务挂起
  • [SPARK-37865]: 当 Union 的第一个子节点有重复列时,Spark 不应去重 groupingExpressions
  • [SPARK-37963]: 在 InMemoryCatalog 中重命名表后,需要更新分区 URI
  • [SPARK-37995]: 当 spark.sql.optimizer.dynamicPartitionPruning.reuseBroadcastOnly 为 false 时,TPCDS 1TB q72 失败
  • [SPARK-38018]: 修复 ColumnVectorUtils.populate 以正确处理 CalendarIntervalType
  • [SPARK-38019]: ExecutorMonitor.timedOutExecutors 应该是确定性的
  • [SPARK-38023]: ExecutorMonitor.onExecutorRemoved 应将 ExecutorDecommission 处理为已完成
  • [SPARK-38030]: 包含不可为空列的 cast 查询在 Spark 3.1.1 上使用 AQE 时失败
  • [SPARK-38042]: 当 tuple 组件是 Array 的类型别名时,找不到 Encoder
  • [SPARK-38056]: 使用 LevelDB 时,结构化流在历史服务器中不起作用
  • [SPARK-38073]: 更新 atexit 函数以避免后期绑定问题
  • [SPARK-38075]: 带 order by 和 limit 的 Hive 脚本转换将返回虚假行
  • [SPARK-38120]: 当分区列名称为大写且分区值中包含点时,HiveExternalCatalog.listPartitions 失败
  • [SPARK-38178]: 更正测量 RocksDB 内存使用情况的逻辑
  • [SPARK-38180]: 允许在相关的相等谓词中使用安全向上转换表达式
  • [SPARK-38185]: 如果聚合函数为空,则修复数据不正确的问题
  • [SPARK-38204]: 所有状态运算符都存在状态分区和运算符分区之间不一致的风险
  • [SPARK-38221]: 按复杂表达式流进行分组失败
  • [SPARK-38236]: 在 create/alter table 中指定的绝对文件路径被视为相对路径
  • [SPARK-38271]: PoissonSampler 可能会输出比 MaxRows 更多的行
  • [SPARK-38273]: decodeUnsafeRows 的迭代器应该关闭底层输入流
  • [SPARK-38285]: ClassCastException:无法将 GenericArrayData 转换为 InternalRow
  • [SPARK-38286]: Union 的 maxRows 和 maxRowsPerPartition 可能会溢出
  • [SPARK-38304]: 如果索引在 ANSI 模式下为 null,则 Elt() 应返回 null
  • [SPARK-38309]: SHS 具有不正确的 shuffle 读取字节数和 shuffle 总块数指标的百分位数
  • [SPARK-38320]: (flat)MapGroupsWithState 可能会使在同一微批处理中刚收到输入的组超时
  • [SPARK-38325]: ANSI 模式:避免 HashJoin.extractKeyExprAt() 中的潜在运行时错误
  • [SPARK-38333]: DPP 导致 DataSourceScanExec java.lang.NullPointerException
  • [SPARK-38347]: transformUpWithNewOutput 中的可空性传播
  • [SPARK-38363]: 当 ANSI 模式打开时,避免 Dataset.summary() 中的运行时错误
  • [SPARK-38379]: 修复使用存储类挂载持久卷时的 Kubernetes 客户端模式
  • [SPARK-38407]: ANSI Cast:放宽转换非空复杂类型的限制
  • [SPARK-38411]: 当 doMergeApplicationListingInternal 读取事件日志时,使用 UTF-8
  • [SPARK-38412]: fromto 在 StateSchemaCompatibilityChecker 中被交换
  • [SPARK-38446]: ExecutorClassLoader 和 FileDownloadCallback 之间由 Log4j 引起的死锁
  • [SPARK-38528]: 在聚合表达式流中选择生成器时出现 NullPointerException
  • [SPARK-38542]: UnsafeHashedRelation 应该序列化 numKeys
  • [SPARK-38570]: 由 Literal 导致的错误 DynamicPartitionPruning
  • [SPARK-38579]: 请求 Restful API 可能导致 NullPointerException
  • [SPARK-38587]: 验证重命名命令的新位置应使用格式化的名称
  • [SPARK-38614]: 不要通过使用 percent_rank 的窗口推送限制
  • [SPARK-38631]: 通过 Utils.unpack() 的任意 shell 命令注入
  • [SPARK-38652]: uploadFileUri 应该保留文件方案
  • [SPARK-38655]: OffsetWindowFunctionFrameBase 无法找到输入不为 null 的偏移行
  • [SPARK-38677]: pyspark 在本地模式下运行 rdd map 操作时挂起
  • [SPARK-38684]: 由于外部迭代器上的弱读取一致性,流-流外部连接可能存在正确性问题
  • [SPARK-38787]: 在处理边缘情况时,流-流连接可能存在正确性问题
  • [SPARK-38809]: 实现跳过流-流连接的对称哈希实现中的空值的选项
  • [SPARK-38868]: 在 left_outer 连接后,assert_true 无条件失败
  • [SPARK-38916]: 因 killTask() 和 launchTask() 之间的竞争条件导致任务未被终止
  • [SPARK-38922]: TaskLocation.apply 抛出 NullPointerException
  • [SPARK-38931]: RocksDB 文件管理器不会在第一次空检查点上使用未知密钥数创建初始 dfs 目录
  • [SPARK-38936]: 脚本转换 feed 线程应该有名称
  • [SPARK-38955]: 在“from_csv”和“schema_of_csv”中禁用 lineSep 选项
  • [SPARK-38977]: 修复与相关子查询的模式修剪
  • [SPARK-38990]: date_trunc 和 trunc 在内联表中使用列中的格式都失败
  • [SPARK-38992]: 避免在 ShellBasedGroupsMappingProvider 中使用 bash -c
  • [SPARK-39030]: 重命名 sum 以避免着色内置的 Python 函数
  • [SPARK-39061]: 将 Inline 函数用于动态创建的结构数组时,结果不正确或发生 NPE
  • [SPARK-39083]: 修复 FsHistoryProvider 在更新和清理应用程序数据之间的竞争条件
  • [SPARK-39084]: df.rdd.isEmpty() 导致意外的执行器故障和 JVM 崩溃
  • [SPARK-39104]: 取消持久化调用时出现空指针异常
  • [SPARK-39107]: regexp_replace 对空字符串的处理方式发生静默更改
  • [SPARK-39174]: Catalogs 加载吞噬了 ClassNotFoundException 的缺失类名
  • [SPARK-39259]: 子查询中 now() 和等效函数返回的时间戳不一致
  • [SPARK-39283]: Spark 任务由于 TaskMemoryManager 和 UnsafeExternalSorter 之间的死锁而永远卡住
  • [SPARK-39293]: 如果是字符串、结构、数组或映射,ArrayAggregate 的累加器应复制中间结果
  • [SPARK-39340]: DS v2 agg 下推应允许顶级列的名称中包含点
  • [SPARK-39376]: 不要在使用 NATURAL/USING JOIN 的子查询别名的星号扩展中输出重复的列
  • [SPARK-39393]: Parquet 数据源仅支持非重复基本类型的下推谓词过滤器
  • [SPARK-39419]: 当 ArraySort 的比较器返回 null 时,它应该失败。
  • [SPARK-39422]: SHOW CREATE TABLE 应该为具有不受支持的 serde 配置的 Hive 表建议 'AS SERDE'
  • [SPARK-39447]: 只有非广播查询阶段才能传播空关系
  • [SPARK-39476]: 从 Long 转换为 Float/Double 或从 Integer 转换为 Float 时,禁用 Unwrap cast 优化
  • [SPARK-39496]: 内联 eval 路径无法处理空结构
  • [SPARK-39505]: 转义 UI 中呈现的日志内容
  • [SPARK-39543]: 如果回退到 v1,DataFrameWriterV2 的选项应传递给存储属性
  • [SPARK-39548]: 带有窗口子句查询的 CreateView 命令遇到找不到错误窗口定义的问题
  • [SPARK-39570]: 内联表应允许带有别名的表达式
  • [SPARK-39575]: AvroDeserializer 中 get 之后 ByteBuffer 忘记回溯
  • [SPARK-39650]: 流式去重不应检查 “value” 的模式
  • [SPARK-39672]: NotExists 子查询因冲突的属性而失败
  • [SPARK-39758]: 来自 regexp 函数的无效模式上的 NPE

依赖项变更

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

您可以查阅 JIRA 了解详细变更

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


Spark 新闻存档