Spark 开发到底用 Python 还是 Scala 开发?
ingemar-
2022年06月22日 16:45

Spark 提供了四种编程语言的支持: Python、Scala、Java 以及 R。

通常作为Spark的开发者主要考虑的就是如何在Python 与 Scala之间进行选择。

从Spark的官网介绍上, 也将Python和 Scala放在了靠前的位置.

Python语言简介

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python最大的特点是易于学习,Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。对新手十分友好。

全网首套基于Python语言的spark免费教程:spark3.2快速入门到精通​

Scala语言简介

Scala 是 scalable language 的缩写。设计初衷是要整合面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。

Spark是使用Scala语言开发的, 理论上使用Scala开发Spark程序运行效率会更高。

Scala语言的学习难度较大,对编程新手并不友好。

cut-off

那么究竟如何选择?到底是使用python 还是 scala?

从开发效率角度比较

Python语法简单,容易上手,实现相同的功能代码量更少,可以让开发人员更加专注与业务逻辑。Scala语法相对复杂,可读性比Python差。

cut-off

从执行效率角度对比

Spark SQL

在 Spark 中,有三种不同的数据抽象: RDD、DataSet、DataFrame。其中,RDD 基本上 支持了Python 和 Scala 两种语言 ,然而,考虑到 在 Spark 3.0 后Spark官方更加推荐使用Spark SQL中的DataSet 与 DataFrame, 因此我们着重比较DataSet 与 DataFrame.

DataSet 由于提供了强类型支持,Python 语言无法支持DataSet的API, 只能通过Scala或者 Java操作DataSet。DataFrame 的API 支持Python语言,但无论 Scala 和 Python两种语言都是通过 Catalyst 进行 RDD API的优化转换,因此,Scala 和 Python之间性能上几乎没有差别

Spark Streaming

Spark Streaming 是Spark核心API的一个扩展,它对实时流式数据的处理具有可扩展性、高吞吐量、可容错性等特点。

早期版本的Spark Streaming API 底层的数据结构是DStream,python对DStream的支持有限..

但是在新版本的 Structured Streaming API中, 也是使用 Datasets 和 DataFrames 的数据结构,Python的效率不低于 Scala。

MLlib

MLlib 是 Spark 的机器学习 (ML) 库。它的目标是使实用的机器学习变得可扩展且简单。

在Spark官方文档已经说明:基于DataFrame API 是MLlib的最主要的API。Python 和 Scala都支持DataFrame API,但是Python在机器学习领域里有绝对的优势

GraphX

GraphX 是 Spark 中用于图形和图形并行计算的新组件。GraphX的API 不支持Python语言, 只能使用Scala 或者 Java

综上所述,除了GraphX 不能用Python处理之外,机器学习领域的MLlib Python占有优势。 在处理结构化数据和流计算场景下, Python 与Scala的运行效率几乎没有差异。

cut-off

从底层代码角度考虑

由于Spark 是用Scala开发的,如果项目中涉及到对底层源代码的修改, 必须使用Scala进行开发

cut-off

总的来说

如果项目中选择Spark3.X以后的版本, 且不涉及Graphx 和 底层代码修改,推荐使用Python来开发Spark项目。

Spark官方在3.X以后的版本逐渐加大了对Python API的支持力度。包括在Spark 3.2中引入了Pandas API, 对Python开发者更加又好。

使用Python 进行Spark开发, 代码量小,开发效率高, 对于新手以及其它语言的开发者更为友好,且运行效率不输 Scala。

推荐你一套免费的基于Python语言的spark教程:spark3.2快速入门到精通​

cut-off