InfoQSpark 3.0开发近两年终于发布,流、Python、SQL重大更新详解( 二 )


在一个 3TB 的 TPC-DS 基准测试中 , 与没有 AQE 的 Spark 相比 , 有 AQE 的 Spark 将两个查询的性能提升了 1.5 倍以上 , 另外 37 个查询的性能提升了 1.1 倍以上 。
InfoQSpark 3.0开发近两年终于发布,流、Python、SQL重大更新详解
本文插图
当优化器无法在编译时识别可跳过的分区 , 可以使用“动态分区修剪” , 这在星型模型中很常见(星型模型由一个或多个事实表组成 , 这些事实表引用了任意数量的维度表) 。 在执行这种连接操作时 , 我们可以通过识别维度表过滤之后的分区来修剪从事实表读取的分区 。 在一个 TPC-DS 基准测试中 , 102 个查询中有 60 个查询获得 2 到 18 倍的速度提升 。
InfoQSpark 3.0开发近两年终于发布,流、Python、SQL重大更新详解
本文插图
ANSI SQL 兼容性对于将工作负载从其他 SQL 引擎迁移到 Spark SQL 来说至关重要 。 为了提升兼容性 , 新版本使用了 Proleptic Gregorian 日历 , 用户可以禁止使用 ANSI SQL 保留关键字作为标识符 。 此外 , 新版本针对数字类型的操作中引入了运行时溢出检查 , 并强制执行编译时类型检查 。 这些新的验证机制提高了数据质量 。
连接提示:尽管 Databricks 一直在改进编译器 , 但还是不能保证编译器可以在任何时候做出最佳决策——连接算法的选择基于统计信息和启发式 。 当编译器无法做出最佳选择时 , 用户可以使用连接提示来影响优化器 , 让它选择更好的执行计划 。 新版本加入了新的提示:SHUFFLE_MERGE、SHUFFLE_HASH 和 SHUFFLE_REPLICATE_NL 。
增强的 Python API:PySpark 和 Koalas Python 现在是 Spark 中使用最为广泛的编程语言 , 所以也是 Spark 3.0 的重点关注领域 。 Databricks 有 68%的 NoteBook 命令是用 Python 写的 。 PySpark 在 PyPI 上的月下载量超过 500 万 。
InfoQSpark 3.0开发近两年终于发布,流、Python、SQL重大更新详解
本文插图
很多 Python 开发人员在数据结构和数据分析方面使用了 Pandas API , 但仅限于单节点处理 。 Databricks 会继续开发 Koalas(一种基于 Apache Spark 的 Pandas API 实现) , 让数据科学家能够在分布式环境中更高效地处理大数据 。 借助 Koalas , 数据科学家们就不需要构建很多函数(例如绘图支持) , 在整个群集中获得更高的性能 。
经过一年多的开发 , Koalas 实现了将近 80% 的 Pandas API 。 Koalas 在 PyPI 上的月下载量已迅速增长到 85 万 , 并以每两周发布一次的节奏快速演进 。 除了 Koalas , 很多人仍在使用 PySpark API , 该 API 也越来越受欢迎 。
InfoQSpark 3.0开发近两年终于发布,流、Python、SQL重大更新详解
本文插图
Spark 3.0 对 PySpark API 做了一些增强: