最近看到了 Apache Spark 发布了 3.2 版本的预告 Pandas API on Upcoming Apache Spark™ 3.2,文章写得很简单,但是体现了 Spark 的一个很重要的发展趋势,就是拥抱 Python 的数据科学社区。
毋庸置疑,在大数据 AI的时代,最耀眼的编程语言是 Python,比如 scikit-learn、XGBoost 和 Tensorflow/PyTorch 都是 Python 的一部分,这些与机器学习相关的包的背后则是 Numpy 和 Pandas。肉眼可见,暂时没有一种新的编程语言可以替代 Python 背后蓬勃发展的数据科学社区从而替代 Python 在大数据 AI领域里的地位。
正因为如此,即使 Spark 是使用 Scala 语言编写的,但是依然选择“重兵投入”到 Python 社区,比如 Spark3.2 所支持的 Pandas API 和背后的 Project Zen。
什么是 Project Zen 呢?按照 Databricks 的blog,Zen 取自著名的 Python 之禅(Python 之禅阐述了 Python 语言的精髓)。
With this momentum, the Spark community started to focus more on Python and PySpark, and in an initiative we named Project Zen, named after The Zen of Python that defines the principles of Python itself.
Zen 项目旨在提高 Spark 在 Python 方面的可用性,Spark 社区希望通过 Zen 项目让 Spark 里的 Python的使用和 Python 生态圈的其它API一样易用。比如
- 重新设计 PySpark 文档
- PySpark 类型提示
- 可视化
- 标准化警告和异常
- 面向 PyPI 用户的 JDK、Hive 和 Hadoop 分发选项
Pandas API on Upcoming Apache Spark™ 3.2 就是Zen 项目的一部分。也就是说 pandas 的用户将能够在他们现有的 Spark 集群上利用 pandas API。
Spark 3.2 的其它特性尚不可知,但是 Pandas API on Apache Spark 就提前官宣了,可想而知这个特性对 Spark 团队的重要性。我也认为这也是彻底拉开 Spark 和其它竞争对手的关键一步。
代码语言:javascript复制from pandas import read_csv
from pyspark.pandas import read_csv
pdf = read_csv("data.csv")
修改为
from pyspark.pandas import read_csv
pdf = read_csv("data.csv")
为什么会这么说呢?Pandas 非常好用,但是有一个致命缺陷就是受限于 Python 语言是单机运行的,扩展性非常不好,导致数据量一大,就得使用类似于 Spark 的大数据计算引擎去翻译 Python 代码才能计算。
仅仅局限于 Pandas 还好,如果数据科学家使用的是 scikit-learn 去完成机器学习模型的构建,对于很多数据科学家本身是不熟悉 Spark 的,也就是说还需要一个大数据工程师去把用 Python 写的机器学习模型翻译成用 Scala 写的代码或者是用 PySpark 重写一遍。
因此如果有了 Pandas API on Apache Spark 意味着数据科学家可以没有任何压力的情况下使用 Spark 引擎,而不用再考虑数据量的大小或者是让工程师们帮忙了。另外在某种程度上,也成功的兼容了 Python 庞大的数据科学社区,Spark 的自身机器学习框架估计也会逐渐迈入倒计时。
写到这里,也不得不感叹 Spark 开发者们的眼光是真的好。