
Spark 提供了四种编程语言的支持: Python、Scala、Java 以及 R。
通常作为Spark的开发者主要考虑的就是如何在Python 与 Scala之间进行选择。

从Spark的官网介绍上, 也将Python和 Scala放在了靠前的位置.
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python最大的特点是易于学习,Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。对新手十分友好。
全网首套基于Python语言的spark免费教程:spark3.2快速入门到精通
Scala 是 scalable language 的缩写。设计初衷是要整合面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。
Spark是使用Scala语言开发的, 理论上使用Scala开发Spark程序运行效率会更高。
Scala语言的学习难度较大,对编程新手并不友好。

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

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的运行效率几乎没有差异。

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

如果项目中选择Spark3.X以后的版本, 且不涉及Graphx 和 底层代码修改,推荐使用Python来开发Spark项目。
Spark官方在3.X以后的版本逐渐加大了对Python API的支持力度。包括在Spark 3.2中引入了Pandas API, 对Python开发者更加又好。
使用Python 进行Spark开发, 代码量小,开发效率高, 对于新手以及其它语言的开发者更为友好,且运行效率不输 Scala。
推荐你一套免费的基于Python语言的spark教程:spark3.2快速入门到精通
