概述
特别重要的特性
在 PySpark 上支持 Pandas API 层 (SPARK-34849) 默认启用自适应查询执行(AQE)(SPARK-33679) 支持push-based shuffle,提高shuffle效率 (SPARK-30602) 添加 RocksDB StateStore 实现 (SPARK-34198) 基于 EventTime 的会话化(会话窗口) (SPARK-10816) ANSI SQL 模式 GA (SPARK-35030) 支持 ANSI SQL INTERVAL 类型 (SPARK-27790) 查询编译延迟减少 (SPARK-35042, SPARK-35103, SPARK-34989) 支持 Scala 2.13 (SPARK-34218)

Core and Spark SQL
ANSI SQL 兼容性增强
支持 ANSI SQL INTERVAL 类型 (SPARK-27790) ANSI 模式下的新类型强制语法规则 (SPARK-34246) 支持横向子查询 (SPARK-34382) ANSI 模式:IntegralDivide 在溢出时抛出异常 (SPARK-35152) ANSI 模式:检查平均溢出 (SPARK-35955) Block count(table.*) 遵循 ANSI 标准和其他 SQL 引擎(SPARK-34199) LEAD/LAG/NTH_VALUE/FIRST_VALUE/LAST_VALUE 支持 (IGNORERESPECT) NULL(SPARK-30789)
性能
查询编译延迟 支持转换/解析函数及其调用点中的遍历修剪 (SPARK-35042) 提高 mapChildren 和 withNewChildren 方法的性能 (SPARK-34989) 提高类型强制规则的性能 (SPARK-35103) 查询优化 删除优化器中的冗余聚合 (SPARK-33122) 通过join的项目下限 (SPARK-34622) LEFT SEMI 和 LEFT ANTI 连接的下推限制 (SPARK-36404, SPARK-34514) 当分区规格为空时通过 WINDOW 下限 (SPARK-34575) 在 CBO 中使用相对成本比较函数 (SPARK-34922) 联合、排序和范围运算符的基数估计 (SPARK-33411) 如果加入可以计划为广播加入,则仅在聚合上按下 LeftSemi/LeftAnti(SPARK-34081) UnwrapCastInBinaryComparison 支持 In/InSet 谓词 (SPARK-35316) 子表达式消除增强 (SPARK-35448) 分区修剪后保留必要的统计信息 (SPARK-34119) 分离桶过滤器修剪和桶表扫描 (SPARK-32985) 查询执行 默认启用自适应查询执行 (SPARK-33679) 当加入开始时是广播哈希加入或没有重用的广播交换时,支持AQE中的动态分区修剪(DPP) (SPARK-34168, SPARK-35710) 在合并 shuffle 分区之前优化 skew join (SPARK-35447) 支持使用规则的 AQE 侧 shuffled hash join 公式 (SPARK-35282) 支持 AQE 侧广播哈希加入阈值 (SPARK-35264) 允许 AQE 成本评估器的自定义插件 (SPARK-35794) 自适应查询执行 默认启用 Zstandard 缓冲池 (SPARK-34340, SPARK-34390) 为排序合并连接的所有连接类型添加代码生成 (SPARK-34705) 整个计划交换和子查询重用 (SPARK-29375) 广播嵌套循环连接改进 (SPARK-34706) 允许并发写入器写入动态分区和桶表 (SPARK-26164) 提高 Spark Thrift 服务器中处理 FETCH_PRIOR 的性能 (SPARK-33655)
Parquet 将 Apache Parquet 升级到 1.12.1 版本 (SPARK-36726) 支持 Parquet 矢量化阅读器中的列索引 (SPARK-34289) 添加新的镶木地板数据源选项以控制读取中的日期时间变基 (SPARK-34377) 读取在 parquet 中存储为 int32 物理类型的 parquet 无符号类型(SPARK-34817) 将存储为有符号 int64 物理类型的 Parquet unsigned int64 逻辑类型读取为 decimal(20, 0) (SPARK-34786) 使用矢量化 Parquet 阅读器时处理列索引 (SPARK-34859) 改进 Parquet 过滤器下推 (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-to-Avro 模式匹配的支持 (SPARK-34365) JSON 升级 Jackson 到 2.12.3 版本 (SPARK-35550) 允许 JSON 数据源将非 ASCII 字符写入代码点(SPARK-35047) CSV 将 univocity-parsers 升级到 2.9.1(SPARK-33940) JDBC 将 JDBC SQL TIME 类型映射到 TimestampType,无论时区如何,时间部分都是固定的 (SPARK-34357) 在 JDBCRelation 中计算更精确的分区步幅 (SPARK-34843) 支持 JDBC 数据源中的 refreshKrb5Config 选项 (SPARK-35226) Hive Metastore 支持过滤器 NOT IN (SPARK-34538)
将 Kubernetes 客户端升级到 5.4.1 (SPARK-35660) 支持 spark.kubernetes.executor.disableConfigMap (SPARK-34316) 支持远程模板文件 (SPARK-34783) 引入对挂起 POD 的限制 (SPARK-36052) 支持重用PVC的shuffle数据恢复 (SPARK-35593) 支持应用程序终止期间的早期驱动程序服务清理 (SPARK-35131) 在执行程序启动之前添加驱动程序就绪超时配置 (SPARK-32975) 支持 driver 自有按需 PVC(SPARK-35182) 最长退役时间并允许排除排除(SPARK-34104) 支持只用token提交到k8s (SPARK-33720) 为自定义功能步骤添加开发人员 API (SPARK-33261)
聚合下推 API (SPARK-34952) 功能目录API (SPARK-27658) DataSourceV2 函数目录实现 (SPARK-35260) 添加 API 以在写入时请求分发和排序 (SPARK-33779) 添加接口以传递写入所需的排序和聚类 (SPARK-23889) 支持来自 Datasource v2 扫描的指标 (SPARK-34338) 在写入路径支持 metrics (SPARK-36030) 支持在所需分布上使用静态数字进行分区并在写入时排序 (SPARK-34255) 支持动态过滤 (SPARK-35779) 支持本地扫描 (SPARK-35535) MERGE ... UPDATE/INSERT * 应该按名称解析 (SPARK-34720)
子查询改进 改进相关子查询 (SPARK-35553) 允许非聚合的单行相关标量子查询(SPARK-28379) 聚合子查询时只允许相关等式谓词的子集 (SPARK-35080) 使用外部查询计划解析子查询中的星型表达式 (SPARK-35618) 新的内置函数 current_user (SPARK-21957) product (SPARK-33678) regexp_like,regexp (SPARK-33597, SPARK-34376) try_cast (SPARK-34881) try_add (SPARK-35162) try_divide (SPARK-35162) bit_get (SPARK-33245) 默认使用 Apache Hadoop 3.3.1 (SPARK-29250) 公开用户定义类型 (UDT) API (SPARK-7768) 为 shuffle 块添加校验和 (SPARK-35275) 默认启用 spark.storage.replication.proactive (SPARK-33870) 添加表函数注册表 (SPARK-34678) 在停止 SparkContext 期间支持回退存储清理 (SPARK-34142) 支持来自 Scala Dataset API 的 Java 枚举 (SPARK-23862) 添加带有常春藤坐标的 JAR 应该与 Hive 传递行为兼容 (SPARK-34506) 支持 ADD ARCHIVE 和 LIST ARCHIVES 命令(SPARK-34603) 支持 ADD FILE/JAR/ARCHIVE 命令的多路径(SPARK-35105) 支持存档文件作为 CREATE FUNCTION USING 语法的资源 (SPARK-35236) 从 ServiceLoader 加载 SparkSessionExtensions (SPARK-35380) 为函数添加句子函数{scala,py} (SPARK-35418) 扩展解码功能,与主流数据库保持一致 (SPARK-33527) 对使用 Hive Metastore 进行分区管理的非 Hive 表应用 spark.sql.hive.metastorePartitionPruning (SPARK-36128) 支持创建带有空列的表 (SPARK-36241) 避免使用 CTE 内联不确定性 (SPARK-36447) 支持分析特定数据库中的所有表(SPARK-33687) 标准化 Spark 中的异常消息 (SPARK-33539)
监控 ExternalShuffleService 的新指标 (SPARK-35258) 添加新的阶段级 REST API 和参数 (SPARK-26399) 支持 REST API 中的任务和执行器指标分布 (SPARK-34488) 为哈希聚合添加回退指标 (SPARK-35529, SPARK-34237) 将 exec 丢失的原因传播到 Web UI (SPARK-34764) 将 count_distinct 作为选项添加到 Dataset#summary (SPARK-34165) 将 SQLSTATE 和 ERRORCODE 引入 SQL Exception (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 中保持 stage entry 直到发生心跳 (SPARK-34779) 用 RewriteDistinctAggregates 中的过滤器子句替换 if (SPARK-34882) CREATE TABLE LIKE 应该尊重保留的表属性(SPARK-34935) 修复嵌套列修剪以从结构数组中提取不区分大小写的结构字段(SPARK-34963) 在 YARN 集群模式下将 ivySettings 文件传送到驱动程序 (SPARK-34472) 从 USING/NATURAL JOIN 中解决重复的公共列 (SPARK-34527) Invoke 应该找到具有正确数量参数的方法 (SPARK-35278) 不要从没有聚合函数的聚合表达式中优化出分组表达式 (SPARK-34581) 支持通过/重新分区提示解析分发/集群缺少的属性 (SPARK-35331) 通过推断缺少的配置来改进 s3a 魔术提交者支持 (SPARK-35383) 避免目标目录不存在导致文件重命名失败 (SPARK-35106) BlockManagerMasterEndpoint 在更新过程中不应忽略仅索引的 shuffle 文件 (SPARK-35589) 修改 Set 命令结果中的敏感信息 (SPARK-35576) 更新状态模式以能够接受长 JSON(SPARK-35602) 考虑将 STRUCT 数据类型定义中的‘:’设为可选 (SPARK-35706) 视图不应捕获 RelationConversions 中使用的配置 (SPARK-35792) 附加新的嵌套结构字段而不是使用空填充对 unionByName 进行排序 (SPARK-35290) 使用 Void 作为 NullType 的类型名 (SPARK-36224)
Structured Streaming
添加 RocksDB StateStore 实现 (SPARK-34198) 基于 EventTime 的会话化(会话窗口) (SPARK-10816) 将 Kafka 客户端升级到 2.8.0(SPARK-33913)
支持用户定义的初始状态与结构化流中的 flatMapGroupsWithState(SPARK-35896) 批量模式下支持 flatMapGroupsWithState 的初始状态 (SPARK-36132) 介绍Kafka数据源起始偏移时间戳不匹配偏移策略(SPARK-35611) 在 Kafka 源中引入一个新的 Option 来指定每个触发器要读取的最小记录数 (SPARK-35312) 在 StreamingQueryProgress 中为有状态运算符包含更细粒度的指标 (SPARK-35896) 通过进度报告公开源指标并添加 Kafka 用例以报告延迟 (SPARK-34854) 添加忽略 FileStreamSink 元数据目录的配置 (SPARK-35565) 将最新的偏移量添加到源进度 (SPARK-33955)
PySpark
Spark 上的 Pandas API(SPARK-34849) 为 pandas-on-Spark 启用 mypy (SPARK-34941) 实现 CategoricalDtype 支持 (SPARK-35997, SPARK-36185) 完成Series和Index的基本操作 (SPARK-36103, SPARK-36104, SPARK-36192) 将行为与熊猫 1.3 匹配 (SPARK-36367) 将带有 NaN 的 Series 上的行为与 Pandas 匹配 ’(SPARK-36031, SPARK-36310) 实现整数系列和索引的一元运算符“反转” (SPARK-36003) 实现 CategoricalIndex.map 和 DatetimeIndex.map (SPARK-36470) 实现 Index.map (SPARK-36469) 对 Python 工作者的故障处理程序支持崩溃 (SPARK-36062) 跨函数 API 使用 Snake 命名规则 (SPARK-34306) 默认启用 spark.sql.execution.pyspark.udf.simplifiedTraceback.enabled (SPARK-35419) 支持在创建 DataFrame 时将嵌套的 dict 推断为结构 (SPARK-35929)
默认启用固定线程模式 (SPARK-35303) 为 Arrow 执行添加 NullType 支持 (SPARK-33489) 向 toPandas 添加 Arrow self_destruct 支持 (SPARK-32953) 为 PySpark pin 线程模式添加线程目标包装器 API (SPARK-35498)
MLlib
BucketedRandomProjectionLSH 变换优化 (SPARK-34220) w2v findSynonyms 优化 (SPARK-34189) 通过跳过边界检查来优化稀疏 GEMM (SPARK-35707) 通过 GEMV 提高 ML ALS 推荐的性能 (SPARK-33518)
Refactor Logistic Aggregator - 支持虚拟居中 (SPARK-34797) 具有截距支持中心的二元 Logistic 回归 (SPARK-34858, SPARK-34448) 具有截距支持中心的多项 Logistic 回归 (SPARK-34860)
将 com.github.fommil.netlib 完全替换为 dev.ludovic.netlib:2.0(SPARK-35295) 添加矢量化 BLAS 实现 (SPARK-33882) 使用 dev.ludovic.netlib 加速回退 BLAS (SPARK-35150)
OVR 变换修复潜在的列冲突 (SPARK-34356)
SparkR
使用 keyserver.ubuntu.com 作为 CRAN 的密钥服务器 (SPARK-35885)
GraphX
允许关闭静态 PageRank 实用程序应用的规范化 (SPARK-35357)
弃用和删除
弃用 spark.launcher.childConectionTimeout (SPARK-33717) 弃用 GROUP BY ... GROUPING SETS (...) 并提升 GROUP BY GROUPING SETS (...) (SPARK-34932) 在 Spark 文档中弃用 Python 3.6 (SPARK-35939) 弃用 ps.broadcast API(SPARK-35810) 弃用 num_files 参数(SPARK-35807) 弃用 DataFrame.to_spark_io (SPARK-35811)
已知的问题
支持通过 i/o 加密批量获取 shuffle 块 (SPARK-34827) 无法为序列文件 I/O 加载 Snappy 编解码器 (SPARK-36681) 如果表是使用大写模式创建的,则无法插入到 hive 存储桶表中 (SPARK-35531) 在 Spark 中读取没有显式列名的 Hive 视图失败 (SPARK-36905) 由于固定线程模式,作业取消导致 Jupyter 上的 py4j 错误 (SPARK-37004) 驱动程序错误地报告已删除的执行程序在 UI 中处于活动状态 (SPARK-35011)
参考
https://spark.apache.org/releases/spark-release-3-2-0.html
大家也可以看看 Databricks 开源组技术主管,Apache Spark PMC member,Spark 社区最活跃的贡献者之一范文臣带来了主题为What's new in Spark 3.2.0
文章转载自Just do DT,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




