Spark 3.2.0 版本发布

Apache Spark 3.2.0 是 3.x 系列的第三个版本。 凭借开源社区的巨大贡献,此版本解决了超过 1,700 个 Jira 问题。

在此版本中,Spark 支持 Spark 上的 Pandas API 层。 Pandas 用户可以通过一行代码更改在 Spark 上扩展其应用程序。 其他主要更新包括 RocksDB StateStore 支持、会话窗口支持、基于推送的 shuffle 支持、ANSI SQL INTERVAL 类型、默认启用自适应查询执行 (AQE) 和 ANSI SQL 模式 GA。

要下载 Apache Spark 3.2.0,请访问下载页面。 您可以查阅 JIRA 以了解详细更改。 我们在此处整理了一份高级别更改列表,按主要模块分组。

亮点

核心和 Spark SQL

ANSI SQL 兼容性增强

  • 支持 ANSI SQL INTERVAL 类型 (SPARK-27790)
  • ANSI 模式下的新类型强制转换语法规则 (SPARK-34246)
  • 支持 LATERAL 子查询 (SPARK-34382)
  • ANSI 模式:IntegralDivide 在溢出时抛出异常 (SPARK-35152)
  • ANSI 模式:检查 Average 中的溢出 (SPARK-35955)
  • 阻止 count(table.*) 以遵循 ANSI 标准和其他 SQL 引擎 (SPARK-34199)
  • 支持 (IGNORE RESPECT) NULLS 用于 LEAD/LAG/NTH_VALUE/FIRST_VALUE/LAST_VALUE (SPARK-30789)

性能

  • 查询编译延迟
    • 支持在 transform/resolve 函数及其调用站点中进行遍历修剪 (SPARK-35042)
    • 提高 mapChildren 和 withNewChildren 方法的性能 (SPARK-34989)
    • 提高类型强制转换规则的性能 (SPARK-35103)
  • 查询优化
    • 删除优化器中的冗余聚合 (SPARK-33122)
    • 通过带有 Join 的 Project 下推 limit (SPARK-34622)
    • 下推 LEFT SEMI 和 LEFT ANTI join 的 limit (SPARK-36404, SPARK-34514)
    • 当分区规范为空时,通过 WINDOW 下推 limit (SPARK-34575)
    • 在 CBO 中使用相对成本比较函数 (SPARK-34922)
    • union、sort 和 range 运算符的基数估计 (SPARK-33411)
    • 仅当 join 可以计划为广播 join 时,才通过聚合下推 LeftSemi/LeftAnti (SPARK-34081)
    • UnwrapCastInBinaryComparison 支持 In/InSet 谓词 (SPARK-35316)
    • 子表达式消除增强 (SPARK-35448)
    • 在分区修剪后保留必要的统计信息 (SPARK-34119)
    • 解耦桶过滤器修剪和桶表扫描 (SPARK-32985)
  • 查询执行
    • 自适应查询执行
      • 默认启用自适应查询执行 (SPARK-33679)
      • 当 join 在开始时是广播哈希 join 或者没有重用的广播交换时,支持 AQE 中的动态分区修剪 (DPP) (SPARK-34168, SPARK-35710)
      • 在合并 shuffle 分区之前优化倾斜 join (SPARK-35447)
      • 支持使用规则的 AQE 侧 shuffled 哈希 join 公式 (SPARK-35282)
      • 支持 AQE 侧广播哈希 join 阈值 (SPARK-35264)
      • 允许 AQE 成本评估器的自定义插件 (SPARK-35794)
    • 默认启用 Zstandard 缓冲区池 (SPARK-34340, SPARK-34390)
    • 为 sort-merge join 的所有 join 类型添加代码生成 (SPARK-34705)
    • 整个计划交换和子查询重用 (SPARK-29375)
    • 广播嵌套循环 join 改进 (SPARK-34706)
    • 允许并发写入器写入动态分区和桶表 (SPARK-26164)
    • 提高 Spark Thrift 服务器中 FETCH_PRIOR 的处理性能 (SPARK-33655)

连接器增强

  • Parquet
    • 将使用的 Apache Parquet 升级到版本 1.12.1 (SPARK-36726)
    • 支持 Parquet 向量化读取器中的列索引 (SPARK-34289)
    • 添加新的 parquet 数据源选项以控制读取中的日期时间重新设置 (SPARK-34377)
    • 读取在 parquet 中存储为 int32 物理类型的 parquet 无符号类型 (SPARK-34817)
    • 将存储为带符号 int64 物理类型的 Parquet 无符号 int64 逻辑类型读取为 decimal(20, 0) (SPARK-34786)
    • 在使用向量化 Parquet 读取器时处理列索引 (SPARK-34859)
    • 改进 Parquet In 过滤器下推 (SPARK-32792)
  • ORC
    • 将使用的 Apache ORC 升级到版本 1.6.11 (SPARK-36482)
    • 支持 Apache ORC 强制位置演化 (SPARK-32864)
    • 支持 ORC 向量化读取器中的嵌套列 (SPARK-34862)
    • 支持 ORC 数据源中的 ZSTD、LZ4 压缩 (SPARK-33978, SPARK-35612)
    • 在任务配置中设置读取列的列表,以减少 ORC 数据的读取 (SPARK-35783)
  • Avro
    • 将使用的 Apache Avro 升级到版本 1.10.2 (SPARK-34778)
    • 支持带有 “avro.schema.literal” 的分区 Hive 表的 Avro 模式演化 (SPARK-26836)
    • 添加新的 Avro 数据源选项以控制读取中的日期时间重新设置 (SPARK-34404)
    • 在 Avro 中添加对用户提供的模式 url 的支持 (SPARK-34416)
    • 添加对位置 Catalyst 到 Avro 模式匹配的支持 (SPARK-34365)
  • JSON
    • 将使用的 Jackson 升级到版本 2.12.3 (SPARK-35550)
    • 允许 JSON 数据源将非 ASCII 字符写入为代码点 (SPARK-35047)
  • CSV
  • JDBC
    • 将 JDBC SQL TIME 类型映射到 TimestampType,其时间部分固定,与时区无关 (SPARK-34357)
    • 在 JDBCRelation 中计算更精确的分区步长 (SPARK-34843)
    • 支持 JDBC 数据源中的 refreshKrb5Config 选项 (SPARK-35226)
  • Hive Metastore 支持按 NOT IN 过滤 (SPARK-34538)

Kubernetes 增强

  • 将 Kubernetes 客户端升级到 5.4.1 (SPARK-35660)
  • 支持 spark.kubernetes.executor.disableConfigMap (SPARK-34316)
  • 支持远程模板文件 (SPARK-34783)
  • 引入了对挂起 POD 的限制 (SPARK-36052)
  • 支持在重用的 PVC 上恢复 shuffle 数据 (SPARK-35593)
  • 支持在应用程序终止期间提前清理驱动程序服务 (SPARK-35131)
  • 在 executor 启动之前添加驱动程序就绪超时配置 (SPARK-32975)
  • 支持驱动程序拥有的按需 PVC (SPARK-35182)
  • 最大退役时间和允许排除的退役 (SPARK-34104)
  • 支持仅使用 token 提交到 k8s (SPARK-33720)
  • 为自定义功能步骤添加了开发者 API (SPARK-33261)

数据源 V2 API

功能增强

其他值得注意的更改

  • 监控
  • 将 count_distinct 添加为 Dataset#summary 的选项 (SPARK-34165)
  • 将 SQLSTATE 和 ERRORCODE 引入 SQL 异常 (SPARK-34920)
  • 在 sql/core 中实现 ScriptTransform (SPARK-31936)
  • 在刷新 v1 表时保持依赖项缓存 (SPARK-34138)
  • 使 BlockManagerMaster 驱动程序心跳超时可配置 (SPARK-34278)
  • spark.buffer.size 设置的 io.file.buffer.size 被意外加载 hive-site.xml 覆盖,可能导致性能下降 (SPARK-34346)
  • 支持远程调度程序池文件 (SPARK-35083)
  • 使 shuffle 服务名称在客户端可配置,并允许在服务器端进行基于类路径的配置覆盖 (SPARK-34828)
  • ExecutorMetricsPoller 应该将阶段条目保留在 stageTCMP 中,直到发生心跳 (SPARK-34779)
  • 在 RewriteDistinctAggregates 中用 filter 子句替换 if (SPARK-34882)
  • CREATE TABLE LIKE 应该尊重保留的表属性 (SPARK-34935)
  • 修复嵌套列修剪,以便从结构数组中提取不区分大小写的结构字段 (SPARK-34963)
  • 在 YARN 集群模式下,将 ivySettings 文件发送到 Driver (SPARK-34472)
  • 解析来自 USING/NATURAL JOIN 的重复公共列 (SPARK-34527)
  • Invoke 应该找到具有正确数量参数的方法 (SPARK-35278)
  • 不要从没有聚合函数的聚合表达式中优化掉分组表达式 (SPARK-34581)
  • 支持解析 distribute/cluster by/repartition 提示的缺失属性 (SPARK-35331)
  • 通过推断缺失的配置来改进 s3a magic committer 支持 (SPARK-35383)
  • 避免因目标目录不存在而导致的文件重命名失败 (SPARK-35106)
  • BlockManagerMasterEndpoint 在更新期间不应忽略仅索引的 shuffle 文件 (SPARK-35589)
  • 在 Set 命令的结果中编辑敏感信息 (SPARK-35576)
  • 更新状态模式以能够接受长 JSON(SPARK-35602)
  • 考虑使 STRUCT 数据类型定义中的 ‘:’ 成为可选 (SPARK-35706)
  • View 不应捕获 RelationConversions 中使用的配置 (SPARK-35792)
  • 对于具有 null 填充的 unionByName,追加新的嵌套结构字段而不是排序 (SPARK-35290)
  • 使用 Void 作为 NullType 的类型名称 (SPARK-36224)

结构化流

主要特征

其他值得注意的更改

  • 支持在 Structured Streaming 中使用 flatMapGroupsWithState 的用户定义初始状态 (SPARK-35896)
  • 支持批处理模式下 flatMapGroupsWithState 的初始状态 (SPARK-36132)
  • 引入 Kafka 数据源上起始偏移量时间戳的偏移量不匹配策略 (SPARK-35611)
  • 在 Kafka 源中引入一个新选项,以指定每个触发器要读取的最小记录数 (SPARK-35312)
  • 在 StreamingQueryProgress 中包含用于有状态操作符的更精细的指标 (SPARK-35896)
  • 通过进度报告公开源指标,并添加 Kafka 用例以报告延迟 (SPARK-34854)
  • 添加用于忽略 FileStreamSink 的元数据目录的配置 (SPARK-35565)
  • 将最新偏移量添加到源进度 (SPARK-33955)

PySpark

Zen 项目

其他值得注意的更改

  • 默认启用固定线程模式 (SPARK-35303)
  • 为 Arrow 执行添加 NullType 支持 (SPARK-33489)
  • 向 toPandas 添加 Arrow self_destruct 支持 (SPARK-32953)
  • 为 PySpark pin thread 模式添加线程目标包装器 API (SPARK-35498)

MLlib

性能改进

模型训练改进

BLAS 改进

  • 完全用 dev.ludovic.netlib:2.0 替换 com.github.fommil.netlib (SPARK-35295)
  • 添加矢量化 BLAS 实现 (SPARK-33882)
  • 使用 dev.ludovic.netlib 加速回退 BLAS (SPARK-35150)

其他值得注意的更改

编程指南:机器学习库 (MLlib) 指南

SparkR

  • 使用 keyserver.ubuntu.com 作为 CRAN 的密钥服务器 (SPARK-35885)

编程指南:SparkR (R on Spark)

GraphX

  • 允许关闭静态 PageRank 实用程序应用的标准化 (SPARK-35357)

编程指南:GraphX 编程指南

弃用和移除

已知问题

  • 支持使用 i/o 加密批量获取 shuffle 块 (SPARK-34827)
  • 无法加载序列文件 I/O 的 Snappy 编解码器 (SPARK-36681)
  • 如果使用大写模式创建表,则无法插入到 Hive bucket 表中 (SPARK-35531)
  • 在 Spark 中读取没有显式列名的 Hive 视图失败 (SPARK-36905)
  • 由于固定的线程模式,作业取消会导致 Jupyter 上的 py4j 错误 (SPARK-37004)
  • Driver 在 UI 中错误地将已删除的执行器报告为活动状态 (SPARK-35011)

鸣谢

最后但同样重要的是,如果没有以下贡献者,这个版本是不可能实现的:Adam Binford, Ali Afroozeh, Alkis Polyzotis, Allison Wang, Almog Tavor, Amandeep Sharma, Ammar Al-Batool, Andrew Liu, Andy Grove, Ankur Dave, Anton Okolnychyi, Ashray Jain, Attila Zsolt Piros, Ayushi Agarwal, Baohe Zhang, Bo Zhang, Bruce Robbins, Byungsoo Oh, Carlos Peña, Cary Lee, Chandni Singh, Chao Sun, ChaoJun Zhang, Chendi Xue, Cheng Pan, Cheng Su, Chongguang LIU, Chris Thomas, Chris Wu, Daoyuan Wang, David Christle, David Li, David McWhorter, Denis Pyshev, Dereck Li, Dhruv Kumar, Dhruvil Dave, Dingyu Xu, Dominik Gehl, Dongdong Hong, Dongjoon Hyun, Dooyoung Hwang, Duc Hoa Nguyen, Emil Ejbyfeldt, Enzo Bonnal, Erik Krogen, Eugene Koifman, Fabian A.J. Thiele, Fokko Driesprong, Fu Chen, Gabor Somogyi, Gabriele Nizzoli, Gengliang Wang, Gera Shegalov, Gidon Gershinsky, Guangxin Wang, Haejoon Lee, Haiyang Sun, Han, Harsh Panchal, He Qi, Hector Zhang, Holden Karau, Hopefulnick, Huaxin Gao, Hyukjin Kwon, Ionut Boicu, Ismaël Mejía, Ivan Sadikov, Jarek Potiuk, Jason Yarbrough, Jiaan Geng, Jie Hu, Jose Torres, Josh Rosen, Josh Soref, Julien Lafaye, Jungtaek Lim, Kaifei Yi, Kamil Breguła, Karen Feng, Karuppayya Rajendran, Kazuyuki Tanimura, Ke Jia, Keerthan Vasist, Kent Yao, Kevin Pis, Kevin Su, Koert Kuipers, Kousuke Saruta, Kun Wan, Kunlun Huang, Leanken Lin, Lei Peng, Leona Yoda, Li Zhang, Liang-Chi Hsieh, Lidiya Nixon, Linhong Liu, Lipeng Zhu, Luca Canali, Ludovic Henry, Luka Sturtewagen, Lukas Rytz, Luran He, Maciej Szymkiewicz, Marios Meimaris, Maryann Xue, Matthew Powers, Max Gekk, Maya Anderson, Michael Chen, Michael Zhang, Min Shen, Minchu Yang, Mohanad Elsafty, Nicholas Marion, Ohad Raviv, Pablo Langa, Pawel Ptaszynski, Peter Toth, Phillip Henry, Prakhar Jain, Qi Liu, Qi Zhu, Qilong SU, Qingbo Jiao, Quang-Huy Nguyen, Rahul Mahadev, Raza Jafri, Richard Chen, Richard Penney, Rongchuan Jin, Rui Zeng, Ruifeng Zheng, Ryan Blue, Sajith Ariyarathna, Samuel Moseley, Sanket Reddy, Satish Gopalani, Saurabh Chawla, Sean Owen, Serge Rielau, Shahid K I, Shaoyun Chen, Shardul Mahadik, Shiqi Sun, Shixiong Zhu, Steve Loughran, Steven Aerts, Sumeet Gajjar, Swinky Mann, Takeshi Yamamuro, Takuya UESHIN, Tanel Kiis, Tathagata Das, Tengfei Huang, Terry Kim, Tianhan Hu, Tianhua Huang, Tim Armstrong, Tobias Hermann, Tom Van Bussel, Tomas Pereira De Vasconcelos, Twoentartian, Vasily Kolpakov, Venkata Krishnan Sowrirajan, Venkata Sai Akhil Gudesa, Venki Korukanti, Viettel DGD, Vinod KC, Vlad Glinsky, Walid Gara, Wan Kun, Weichen Xu, Wenchen Fan, William Hyun, Xiao Li, Xiduo You, Xingbo Jiang, Xinrong Meng, XiuLi Wei, Xuedong Luan, Yajun Gao, Yang He, Yang Jie, Yazhi Wang, Ye Zhou, Yi Wu, Yi Zhu, Yijia Cui, Yikun Jiang, Yingyi Bu, Yu Zhong, Yuanjian Li, Yuchen Huo, Yuming Wang, Yuto Akutsu, Zebing Lin, Zhang Xingchao, Zhichao Zhang


Spark 新闻存档

最新消息

存档