以下发行说明提供了由 Apache Spark 3.2.1 提供支持的 Databricks Runtime 10.3 和 Databricks Runtime 10.3 Photon 的相关信息。 Photon 处于 公共预览版 。 Databricks 于 2022 年 2 月发布了这些映像。

新增功能和改进

  • 现在,Parquet 和 Avro 编写器在 Parquet 数据源中重新设置时间戳时使用会话时区
  • Spark SQL 中的新函数
  • 低随机合并现已正式提供
  • 新的 COPY INTO 功能:验证模式和架构演变
  • Delta 表现在支持标识列(公共预览版)
  • 现在,Parquet 和 Avro 编写器在 Parquet 数据源中重新设置时间戳时使用会话时区

    现在,Parquet 和 Avro 编写器使用会话时区,而时间戳在 legacy 模式下变基,而不是使用默认的 JVM 时区。 默认情况下,会话时区设置为 JVM 时区。

    Spark SQL 中的新函数

    此版本现在支持以下 Spark SQL 函数:

  • aes_decrypt :使用 AES 解密输入。
  • aes_encrypt :使用 AES 加密输入。
  • contains :确定一个表达式是否包含另一个表达式。
  • endswith :确定一个表达式是否以另一个表达式结尾。
  • percentile_cont :返回一个百分位值。
  • startswith :确定一个表达式是否以另一个表达式开头。
  • 低随机合并现已正式发布

    Delta 命令 MERGE INTO 使用一种称为 低随机合并 的技术,可减少未修改行的随机。 这提高了命令的性能并有助于保留表上的现有集群,例如 Z 排序。 此功能是在 Databricks Runtime 9.0 公共预览版中引入的,现已正式发布。 要启用低随机合并,请将 spark.databricks.delta.merge.enableLowShuffle 设置为 true 。 请参阅 Azure Databricks 上的低随机合并

    新的 COPY INTO 功能:验证模式和架构演变

    验证模式: COPY INTO 现在支持 VALIDATE 模式,在这种模式下,要加载到表中的数据会经过验证,但不写入表中。 这些验证包括:

  • 是否可以解析数据。
  • 架构是否与表匹配,或者架构是否需要演变。
  • 是否满足所有可空性和检查约束。
  • 示例用法:

    COPY INTO <table>
    FROM <path_to_files>
    FILEFORMAT = <format>
    VALIDATE [ALL | <num_rows> ROWS]
    

    默认是验证所有要加载的数据。 你可以提供要使用 ROWS 关键字验证的行数,例如 VALIDATE 15 ROWS。 当小于 50 的数字与 ROWS 关键字一起使用时,COPY INTO 语句返回 50 行或更少的数据的预览)。

    架构演变:COPY INTO 现在通过 COPY_OPTIONS 中的 mergeSchema 选项来支持架构演变。 要演化表的架构,你必须对表具有 OWN 权限。

    用法示例:

    COPY INTO <table>
    FROM <path_to_files>
    FILEFORMAT = <format>
    COPY_OPTIONS ('mergeSchema' = 'true')
    

    请参阅 COPY INTO

    Delta 表现在支持标识列(公共预览版)

    Delta Lake 现在支持标识列。 当你写入定义标识列的 Delta 表,并且你不提供该列的值时,Delta 现在会自动分配唯一且以统计方式增加或减少的值。 请参阅 CREATE TABLE [USING]

  • 升级了 Python 库:
    • distlib 已从 0.3.3 升级到 0.3.4
    • filelock 已从 3.4.0 升级到 3.4.2
    • numpy 已从 1.19.2 升级到 1.20.1
    • plotly 已从 5.3.1 升级到 5.5.0
    • 升级了 R 库:
      • backports 已从 1.4.0 升级到 1.4.1
      • brio 已从 1.1.2 升级到 1.1.3
      • broom 已从 0.7.10 升级到 0.7.11
      • class 已从 7.3-19 升级到 7.3-20
      • cpp11 已从 0.4.1 升级到 0.4.2
      • DBI 已从 1.1.1 升级到 1.1.2
      • devtools 已从 2.4.2 升级到 2.4.3
      • digest 已从 0.6.28 升级到 0.6.29
      • dtplyr 已从 1.1.0 升级到 1.2.0
      • fansi 已从 0.5.0 升级到 1.0.2
      • foreign 已从 0.8-81 升级到 0.8-82
      • fs 已从 1.5.0 升级到 1.5.2
      • gert 已从 1.4.3 升级到 1.5.0
      • glue 已从 1.5.0 升级到 1.6.0
      • httpuv 已从 1.6.3 升级到 1.6.5
      • jsonlite 已从 1.7.2 升级到 1.7.3
      • knitr 已从 1.36 升级到 1.37
      • MASS 已从 7.3-54 升级到 7.3-55
      • Matrix 已从 1.3-4 升级为 1.4-0
      • nlme 已从 3.1-152 升级到了 3.1-155
      • nnet 已从 7.3-16 升级到 7.3-17
      • openssl 已从 1.4.5 升级到 1.4.6
      • parallelly 已从 1.29.0 升级到 1.30.0
      • pkgbuild 已从 1.2.0 升级到 1.3.1
      • pkgload 已从 1.2.3 升级到 1.2.4
      • progressr 已从 0.9.0 升级到 0.10.0
      • Rcpp 已从 1.0.7 升级到 1.0.8
      • readr 已从 2.1.0 升级到 2.1.1
      • remotes 已从 2.4.1 升级到 2.4.2
      • RSQLite 已从 2.2.8 升级到 2.2.9
      • sessioninfo 已从 1.2.1 升级到 1.2.2
      • sparklyr 已从 1.7.2 升级到 1.7.4
      • testthat 已从 3.1.0 升级到 3.1.1
      • tinytex 已从 0.35 升级到 0.36
      • usethis 已从 2.1.3 升级到 2.1.5
      • vroom 已从 1.5.6 升级到 1.5.7
      • withr 已从 2.4.2 升级到 2.4.3
      • xfun 已从 0.28 升级到 0.29
      • xml2 已从 1.3.2 升级到 1.3.3
      • 升级了 Java 库:
        • dev.ludovic.netlib.arpack 已从 1.3.2 升级到 2.2.1
        • dev.ludovic.netlib.blas 已从 1.3.2 升级到 2.2.1
        • dev.ludovic.netlib.lapack 已从 1.3.2 升级到 2.2.1
        • io.delta.delta-sharing-spark_2.12 已从 0.2.0 升级到 0.3.0
        • Apache Spark

          Databricks Runtime 10.3 包含 Apache Spark 3.2.1。 此版本包括 Databricks Runtime 10.2(不受支持)中提供的所有 Spark 修复和改进,还包括对 Spark 进行的以下其他 bug 修复和改进:

        • [SPARK-37896] [SQL] 实现 ConstantColumnVector 并提高隐藏文件元数据的性能
        • [SPARK-37924] [SQL] 在 SHOW CREATE TABLE on VIEW (v1) 中按键对表属性进行排序
        • [SPARK-37636] [SQL] 迁移 DESCRIBE NAMESPACE,因此默认使用 V2 命令
        • [SPARK-37381] [SQL] 统一了 v1 和 v2 SHOW CREATE TABLE 测试
        • [SPARK-37876] [CORE][SQL] 将 SpecificParquetRecordReaderBase.listDirectory 移至 TestUtils
        • [SPARK-37854] [CORE] 将类型检查替换为 Spark 代码中的模式匹配
        • [SPARK-36967] [CORE] 报告准确的随机块大小(如果其倾斜)
        • [SPARK-37864] [SQL] 支持矢量化读取布尔值将 RLE 编码与 Parquet DataPage V2 结合使用
        • [SPARK-37862] [SQL] RecordBinaryComparator 应该快速跳过与未对齐平台对齐的检查
        • [SPARK-37855] [SQL] 在嵌套结构中转换数组时出现 IllegalStateException
        • [SPARK-37858] [SQL] 从 AES 函数中抛出 SparkRuntimeException 并具有错误类
        • [SPARK-37841] [SQL] BasicWriteTaskStatsTracker 不应尝试获取跳过文件的状态
        • [SPARK-37860] [UI] 在“阶段”页任务事件时间线中修复 taskindex
        • [SPARK-36879] [SQL] 支持向量化路径的 Parquet v2 数据页编码 (DELTA_BINARY_PACKED)
        • [SPARK-37828] [SQL] 通过 RebalancePartitions 下推过滤器
        • [SPARK-37802] [SQL][3.2] 复合字段名称应与聚合下推一起使用
        • [SPARK-37826] [SQL] 在 Hive orc impl 的 ORC 文件名中使用 zstd 编解码器名称
        • [SPARK-37820] [SQL] 将 ApacheCommonBase64 替换为 JavaBase64 以获取字符串函数
        • [SPARK-37832] [SQL] Orc 结构转换器应该使用数组而不是链表来查找字段转换器
        • [SPARK-37786] [SQL] StreamingQueryListener 支持使用 SQLConf.get 获取对应 SessionState 的 SQLConf
        • [SPARK-37527] [SQL] 为下推翻译更多标准聚合函数
        • [SPARK-37777] [SQL] 更新 SHOW FUNCTIONS 的 SQL 语法
        • [SPARK-8582] [CORE] 真正要求检查点作业运行一次时,检查点作业预先执行了此操作
        • [SPARK-37822] [SQL] StringSplit 应该在非空元素上返回一个数组
        • [SPARK-37812] [SQL] 反序列化 Orc 结构时,尽可能重用结果行
        • [SPARK-37367] [SQL] 在 DDLParserSuite.create 视图中重新启用异常测试 - 基本
        • [SPARK-37796] [SQL] ByteArrayMethods arrayEquals 应该快速跳过与未对齐平台对齐的检查
        • [SPARK-37817] [SQL][Minor] 删除 complexTypeExtractors.scala 中无法访问的代码
        • [SPARK-37807] [SQL] 解决了 HttpAuthenticationException 消息中的输入错误
        • [SPARK-37750] [SQL] ANSI 模式:如果数组/映射中不存在元素,则可选择返回 null 结果
        • [SPARK-37789] [SQL] 增加一个类来表示 DS V2 中的通用聚合函数
        • [SPARK-37785] [SQL][CORE] 增加 Utils.isInRunningSparkTask
        • [SPARK-37780] [SQL] QueryExecutionListener 支持使用 SQLConf.get 获取对应 SessionState 的 SQLConf
        • [SPARK-37783] [SS][SQL][CORE] 尽可能启用尾递归
        • [SPARK-37726] [SQL] 为排序合并连接添加溢出大小指标
        • [SPARK-37800] [SQL] TreeNode.argString 不正确地格式化 Set[_] 类型的参数
        • [SPARK-37716] [SQL] 改进了 LateralJoin 具有非确定性表达式时的错误消息
        • [SPARK-37779] [SQL] 在(反)序列化之后使 ColumnarToRowExec 计划可规范化
        • [SPARK-37578] [SQL] 从 ds v2 自定义指标更新任务指标
        • [SPARK-37676] [SQL] 支持 ANSI 聚合函数:percentile_cont
        • [SPARK-37724] [SQL] ANSI 模式:默认禁用 ANSI 保留关键字
        • [SPARK-37705] [SQL][3.2] 在 Parquet/Avro 元数据中保存的会话时区中变基时间戳
        • [SPARK-34755] [SQL] 支持转换数字格式的实用程序
        • [SPARK-36703] [SQL] 如果排序是 RepartitionByExpression 的子级,则删除排序
        • [SPARK-37369] [SQL] 避免 InMemoryTableScan 上的冗余 ColumnarToRow 转换
        • [SPARK-37450] [SQL] 从 Generate 中删除不必要的字段
        • [SPARK-37728] [SQL] 使用 ORC 矢量化读取器读取嵌套列可能导致 ArrayIndexOutOfBoundsException
        • [SPARK-37564] [SQL] 为排序聚合添加代码生成而不对键进行分组
        • [SPARK-37659] [UI] [3.2]修复了列出和删除日志信息之间的 FsHistoryProvider 竞争条件
        • [SPARK-37727] [SQL] 显示忽略的配置隐藏警告已在 SparkSession.builder.getOrCreate 中设置
        • [SPARK-37391] [SQL]JdbcConnectionProvider 可判断是否修改了安全上下文
        • [SPARK-37273] [SQL] 支持 Spark SQL 中的隐藏文件元数据列
        • [SPARK-36876] [SQL] 支持 HiveTableScanExec 的动态分区修剪
        • [SPARK-37546] [SQL] V2 ReplaceTableAsSelect 命令应限定位置
        • [SPARK-37545] [SQL] V2 CreateTableAsSelect 命令应该限定位置
        • [SPARK-37707] [SQL] 允许在日期时间类型之间进行存储分配和隐式转换
        • [SPARK-37644] [SQL] 支持数据源 v2 完整聚合下推
        • [SPARK-37695] [CORE][SHUFFLE] 从基于推送的随机中跳过诊断 ob 合并块
        • [SPARK-35295] [ML] 将 com.github.fommil.netlib 完全替换为 dev.ludovic.netlib:2.0
        • [SPARK-37694] [SQL] 不允许删除 spark sql cli 中的资源
        • [SPARK-37330] [SQL] 将 ReplaceTableStatement 迁移到 v2 命令
        • [SPARK-27974] [SQL] 支持 ANSI 聚合函数:array_agg
        • [SPARK-36902] [SQL] 将 CreateTableAsSelectStatement 迁移到 v2 命令
        • [SPARK-37678] [PYTHON] 修正了 _cleanup_and_return 签名
        • [SPARK-37613] [SQL] 支持 ANSI 聚合函数:regr_count
        • [SPARK-37689] [SQL] PropagateEmptyRelation 中应支持展开
        • [SPARK-37654] [SQL] 修正了当字段为 Null 时 Row.getSeq 中的 NPE
        • [SPARK-37496] [SQL] 将 ReplaceTableAsSelectStatement 迁移到 v2 命令
        • [SPARK-37483] [SQL] 支持将 top N 下推到 JDBC 数据源 V2
        • [SPARK-37577] [SQL] 修正了 ClassCastException:ArrayType 无法针对 Generate Pruning 转换为 StructType
        • [SPARK-37310] [SQL] 迁移 ALTER NAMESPACE … SET PROPERTIES 默认使用 V2 命令
        • [SPARK-37501] [SQL] CREATE/REPLACE TABLE 应限定 v2 命令的位置
        • [SPARK-37343] [SQL] 在 JDBC(Postgres 方言)中实现 createIndex、IndexExists 和 dropIndex
        • [SPARK-37060] [CORE][3.2] 处理来自备份主机的驱动程序状态响应
        • [SPARK-37629] [SQL] 加速 Expression.canonicalized
        • [SPARK-37633] [SQL] 如果向下转换失败,则展开转换应跳过...
        • [SPARK-37631] [SQL] 在数学函数中将字符串提升为双精度类型的代码清理
        • [SPARK-37569] [SQL] 不会将嵌套视图字段标记为可为空
        • [SPARK-37557] [SQL] 如果子项已排序,则将对象哈希替换为排序聚合
        • [SPARK-36850] [SQL] 将 CreateTableStatement 迁移到 v2 命令框架
        • [SPARK-37592] [SQL] 提高 JoinSelection 性能
        • [SPARK-37217] [SQL] 写入外部表时应提前检查动态分区的数量
        • [SPARK-37584] [SQL] 新 SQL 函数:map_contains_key
        • [SPARK-37455] [SQL] 如果子项已排序,则将哈希替换为排序聚合
        • [SPARK-34735] [SQL][UI] 添加修改后的配置以在 UI 中执行 SQL
        • [SPARK-37540] [SQL] 检测更多不受支持的按时间顺序查看
        • [SPARK-37376] [SQL] 引入新的 DataSource V2 接口 HasPartitionKey
        • [SPARK-37666] [SQL] 将 GCM 设置为 aes_encrypt()/aes_decrypt() 中的默认模式
        • [SPARK-37573] [SQL] IsolatedClientLoader 应该回退到相关版本,并非总是 hadoop-2.7.4
        • [SPARK-37561] [SQL] 获取 hive 的 DelegationToken 时避免加载所有函数
        • [SPARK-37370] [SQL] 添加 SQL 配置以控制 3.3 中新增的连接代码生成
        • [SPARK-37311] [SQL] 迁移 ALTER NAMESPACE … SET LOCATION 默认使用 V2 命令
        • [SPARK-37192] [SQL] 迁移 SHOW TBLPROPERTIES 以默认使用 V2 命令
        • [SPARK-37219] [SQL] 添加 AS OF 语法支持
        • [SPARK-37316] [SQL] 为存在排序合并连接添加代码生成
        • [SPARK-37591] [SQL] 通过 aes_encrypt()/aes_decrypt() 来支持 GCM 模式
        • [SPARK-37586] [SQL] 在 aes_encrypt()/aes_decrypt() 中添加了modepadding 参数
        • [SPARK-12567] [SQL] 添加 aes_encrypt 和 aes_decrypt 内置函数
        • [SPARK-37392] [SQL] 修正了推断 Generate 约束时的性能错误
        • [SPARK-37481] [Core] [WebUI] 修正了重试后跳过阶段消失的问题
        • [SPARK-37533] [SQL] 新 SQL 函数:try_element_at
        • [SPARK-37451] [SQL] 修正了以下问题:如果启用 spark.sql.legacy.allowNegativeScaleOfDecimal,则字符串类型转换为十进制类型
        • [SPARK-37062] [SS] 引入一个新的数据源,为每个微批次提供一致的行集
        • [SPARK-37552] [SQL] 添加 convert_timezone() 函数
        • [SPARK-37555] [SQL] spark-sql 应该将最后一个未关闭的注释传递给后端
        • [SPARK-37286] [SQL] 将 compileAggregates 已从 JDBCRDD 移动到 JdbcDialect
        • [SPARK-37485] [CORE][SQL] 通过 foreachmap 替换为不产生结果的表达式
        • [SPARK-37556] [SQL] Deser void 类因 Java 序列化而失败
        • [SPARK-37520] [SQL] 增加了 startswith()endswith() 字符串函数
        • [SPARK-37471] [SQL] 嵌套括号注释中的 spark-sql 支持 ;
        • [SPARK-37360] [SQL] 在 JSON 数据源中支持 TimestampNTZ
        • [SPARK-37508] [SQL] 增加了 CONTAINS() 字符串函数
        • [SPARK-37494] [SQL] 统一了 SHOW CREATE TABLE 命令 v1 和 v2 选项输出
        • [SPARK-37524] [SQL] 我们应该在测试动态分区修剪后删除所有表。
        • [SPARK-37389] [SQL] 检查未封闭的括号注释
        • [SPARK-37220] [SQL] 不使用聚合下推拆分 Parquet 读取器的输入文件
        • [SPARK-37326] [SQL] 在 CSV 数据源中支持 TimestampNTZ
        • [SPARK-35867] [SQL] 为 VectorizedPlainValuesReader.readBooleans 启用矢量化读取
        • [SPARK-37484] [CORE][SQL] 将 getgetOrElse 替换为 getOrElse
        • [SPARK-37492] [SQL] 使用 withAllNativeOrcReaders 优化 Orc 测试代码
        • [SPARK-37458] [SS] 已从 foreachBatch 的计划中删除不必要的 SerializeFromObject
        • 请参阅 Databricks Runtime 10.3 维护更新

        • 操作系统:Ubuntu 20.04.3 LTS
        • Java:Zulu 8.56.0.21-CA-linux64
        • Scala:2.12.14
        • Python:3.8.10
        • R:4.1.2
        • Delta Lake:1.1.0
        • 已安装的 Python 库

  •