Spark海量数据处理:技术详解与平台实战
上QQ阅读APP看书,第一时间看更新

1.4 如何选择Spark编程语言

Spark在诞生之初就提供了多种编程语言接口:Scala、Java、Python、SQL,在后面的版本中又加入了R语言编程接口。对于Spark来说,虽然内核由Scala编写而成,但是编程语言从来就不是它的重点,从Spark提供这么多的编程接口来看,Spark鼓励不同背景的人去使用Spark完成自己的数据探索工作。尽管如此,不同编程语言在开发效率、执行效率等方面还是有些不同,本书将目前Spark各种编程语言优缺点罗列如表1-1所示。

表1-1 Spark开发语言对比

Scala作为Spark的开发语言当然得到原生支持,也非常成熟,它简洁的语法也能显著提高开发效率;Java也是Spark原生支持的开发语言,但是Java语法冗长且不支持函数式编程(1.8以后支持),导致它的API设计得比较冗余以及不合理,再加上需要编译执行,Java开发效率无疑是最低的,但Java程序员基数特别大,Java API对于这些用户来说无疑是很友好的;Python与R语言都是解释型脚本语言,不用编译直接运行,尤其是Python更以简洁著称,开发效率自不必说,此外Python与R语言本身也支持函数式编程,这两种语言在开发Spark作业时也是非常自然,但由于其执行原理是计算任务在每个节点安装的Python或R的环境中执行,结果通过管道输出给Spark Worker,因此效率要比Scala与Java低,而且PySpark、SparkR这两个中间件成熟度有待提高。SQL是Spark原生支持的开发语言,从各个维度上来说都是最优的,因此一般情况下,用Spark SQL解决问题是最优选择。

对于刚刚开始学习Spark的用户,一开始最好选择一门自己最熟悉的语言,这样Spark的学习曲线比较平缓。如果从零开始,建议在Scala与Python中间选择,Scala作为Spark的原生开发语言,如果想要深入了解Spark有必要掌握;Python在开发速度方面的优势可以赋予开发人员极强的数据工程实践能力,加之Python在数据科学领域的广泛应用,可以更好地发挥Spark在数据处理方面的优势。基于以上原因,本书主要的开发语言为Scala,有些案例与实战会用Python实现。