今天,开发历时近两年的 Apache Spark 3.0.0 正式发布了!3.0.0 版本一共包含了 3400 多个补丁, 是开源社区有史以来贡献力度最大的一次 ,新版本加入了 Python 和 SQL 的高级功能,提升了探索和生产应用方面的易用性。今年,Spark 也迎来了开源 10 周年,这 10 年里 Spark 一直在不断发展,以便满足更多的应用场景和更广泛的受众需求。
Spark 3.0 主要特性概览
Spark 开源 10 周年
Spark 诞生于加州大学伯克利分校的 AMPLab 实验室,该实验室致力于数据密集型计算的研究。AMPLab 研究人员与大型互联网公司合作,研究如何解决数据和 AI 问题,然后发现那些拥有海量数据的公司也面临同样的问题。于是,他们开发了一个新引擎来处理这些新兴的工作负载,同时又能够让开发人员轻松地使用大数据处理 API。
很快,社区开始参与贡献,对 Spark 进行了扩展,在流、Python 和 SQL 方面带来了新功能,而这些模式现在已经是 Spark 的主要用例。持续的投入把 Spark 带到了今天的状态,成为数据处理、数据科学、机器学习和数据分析工作负载事实上的引擎。Apache Spark 3.0 通过显著改善对 SQL 和 Python(当今 Spark 使用的两种最广泛的语言)的支持和对性能、可操作性等方面的优化继续推进这种趋势。
改进的 Spark SQL 引擎
Spark SQL 是支持大多数 Spark 应用程序的引擎。例如,在>
新的自适应查询执行(AQE)框架通过在运行时生成更好的执行计划来提升性能,即使初始的计划不理想(由于缺少或使用了不正确的数据统计信息和错误地估算了成本)。由于 Spark 的数据存储和计算是分离的,因此数据的到达是无法预测的。基于这些原因,对于 Spark 来说,运行时自适应比传统系统来得更为重要。新版本引入了三个主要的自适应优化:
在一个 3TB 的 TPC-DS 基准测试中,与没有 AQE 的 Spark 相比,有 AQE 的 Spark 将两个查询的性能提升了 1.5 倍以上,另外 37 个查询的性能提升了 1.1 倍以上。
当优化器无法在编译时识别可跳过的分区,可以使用“动态分区修剪”,这在星型模型中很常见(星型模型由一个或多个事实表组成,这些事实表引用了任意数量的维度表)。在执行这种连接操作时,我们可以通过识别维度表过滤之后的分区来修剪从事实表读取的分区。在一个 TPC-DS 基准测试中,102 个查询中有 60 个查询获得 2 到 18 倍的速度提升。
ANSI SQL 兼容性对于将工作负载从其他 SQL 引擎迁移到 Spark SQL 来说至关重要。为了提升兼容性,新版本使用了 Proleptic Gregorian 日历,用户可以禁止使用 ANSI SQL 保留关键字作为标识符。此外,新版本针对数字类型的操作中引入了运行时溢出检查,并强制执行编译时类型检查。这些新的验证机制提高了数据质量。
连接提示:尽管 top="2783">增强的 Python API:PySpark 和 Koalas
Python 现在是 Spark 中使用最为广泛的编程语言,所以也是 Spark 3.0 的重点关注领域。Databricks 有 68%的 NoteBook 命令是用 Python 写的。PySpark 在 PyPI 上的月下载量超过 500 万。
很多 Python 开发人员在数据结构和数据分析方面使用了 Pandas API,但仅限于单节点处理。Databricks 会继续开发 Koalas(一种基于 Apache Spark 的 Pandas API 实现),让数据科学家能够在分布式环境中更高效地处理大数据。借助 Koalas,数据科学家们就不需要构建很多函数(例如绘图支持),在整个群集中获得更高的性能。
经过一年多的开发,Koalas 实现了将近 80%的 Pandas API。Koalas 在 PyPI 上的月下载量已迅速增长到 85 万,并以每两周发布一次的节奏快速演进。除了 Koalas,很多人仍在使用 PySpark API,该 API 也越来越受欢迎。
Spark 3.0 对 PySpark API 做了一些增强:
Hydrogen、流和可扩展性
Spark 3.0 完成了 Hydrogen 项目的关键组件,并引入了新功能来改善流和可扩展性。
Spark 3.0 的其他更新
Spark 3.0 解决了 3400 多个 Jira 问题,这是 440 多个贡献者共同努力的结果。这些贡献者包括个人贡献者和来自 target="_blank">发行说明。发行文档中提供了更多信息,包括数据源、生态系统、监控等。
原文链接: