Spark大数据编程实用教程
上QQ阅读APP看书,第一时间看更新

1.5 Spark和Scala

Spark框架本身是使用Scala开发的,Scala是一种小众语言,个性十分鲜明。那么,Scala有什么特点?为什么要选择Scala来开发Spark框架呢?对于用户来说,是选择Scala来开发Spark应用程序,还是采用Spark所支持的其他语言,如Java、Python?本节将回答这些问题。

1.5.1 Scala语言简介

Scala是一种特性丰富、功能强大的编程语言,具有以下特点。

●Scala结合了面向对象和函数式编程的特性;

●Scala是强类型(Strong Typing)语言,它不支持类型的隐式转换;

●Scala是静态(Static)类型的语言,这个特性有助于减少复杂应用程序中的错误;

●Scala程序在JVM上运行,可以利用Java丰富的库资源;

●Scala支持交互式解释器 REPL(Read-Eval-Print-Loop,“读取-求值-输出”循环),可以直接在 REPL 上输入Scala语言,后台自动编译、运行,显示结果,可以实现程序的快速验证。

可以说,现有主流编程语言的特性在Scala中都可以看到。这对于经验丰富的开发者来说,各种特性可以统一在一门语言中,非常方便开发。但是,对于初学者来说,学习门槛高,内容庞杂,因此,学习曲线会比较陡峭,不少初学者在接触Scala后望而却步,但随着学习的深入,学习者会越来越体会到Scala带来的便利和强大功能,以及语言高度简洁所带来的魅力。

Scala是一门开发语言,Scala程序在JVM上运行;

Spark是一个分布式处理框架,Spark本身是由Scala语言编写的;

可以使用多种语言来编写在Spark上运行的程序,如Scala、Java、Python等。

1.5.2 为什么用Scala开发Spark框架

为什么使用Scala开发Spark框架?

Spark 作者的论文《Resilient Distributed Datasets:A Fault-Tolerant Abstraction for In-Memory Cluster Computing》中解释了原因。选择Scala开发Spark是因为它同时具备简洁和高效这两个特点。

●简洁:Scala对于交互式应用开发非常有用,Scala可以直接通过Shell执行,在大数据处理的场景中,可以快速看到处理后的结果,很多功能往往就是一行代码就可以搞定,不需要像Java那样需要编写很多行代码才能编写一个完整的程序,编译后再运行,因此,Scala的开发效率会比较高(语言上的简洁+直接运行);

●高效:Scala本质上是静态类型语言,它被编译成Java的字节码在JVM上运行,效率和Java基本相当,比较高效。

1.5.3 为什么用Scala开发Spark程序

使用Scala开发Spark程序有很多优点。

●Scala支持函数式编程;

●Scala 的 REPL(Read-Eval-Print-Loop,读取-计算-打印-循环,又称交互式解释器)可以即时验证程序;

●Scala 支持隐式转换(是函数调用的隐式转换,不是变量类型的隐式转换),这样,可以在没有第三方库源码的基础上(第三方库可以不动),扩展库接口;

●Scala支持类型推断,代码更简洁;

●Scala程序在JVM上运行,可以兼容所有的Java库;

●Spark框架本身采用Scala开发,Scala属于Spark的原生语言,Spark对Scala API的支持度最好;

●掌握Scala是阅读Spark源码及深入Spark内部机制的必要条件。

当然,使用Scala来开发Spark程序,也存在一些困难:

●Scala学习门槛高、内容庞杂,学习曲线陡峭,学习人群相对少;

●Scala编译速度慢;

●Scala 功能强大,同样的功能,通常会有很多种实现方法,每种方法的效率差距可能会很大(同样的功能,Python可能只有1种实现),因此,有种说法,说Scala是为聪明人准备的,这个和C语言“相信程序员”的说法类似;

●Scala 代码简洁,表达力强,但有时为了简洁,会过分抽象或者引入生僻的操作符或函数式语法,这样就增加了协作开发和后期维护的困难;

●支持Scala的集成开发工具少且功能不全,要弱于Python和Java;

●Scala的社区规模、成熟度都要弱于Java和Python。

1.5.4 Scala开发Spark程序所涉及的技术

Scala开发Spark程序所涉及的技术汇总如下。

●Scala编译、运行环境构建;

●Scala程序的编译与运行;

●IDEA的使用,包括:编辑器使用、常用快捷键、Build程序、调试和打包等;

●Scala程序的运行原理;

●Scala程序的基本架构;

●Scala 编程的基本语法:程序入口、基本数据类型、变量定义、关键词、控制结构、函数、IO接口、字符串处理和正则表达式等;

●Scala 高级特性:隐式转换、模式匹配、匿名函数、柯里化、面向对象、多线程编程和网络编程等;

●Spark函数库的Scala API:Spark Core的RDD和SparkContext的API、MLlib的RDD API和DataFrame接口、GraphX接口、Streaming的DStream接口、Structured Streaming接口和DataFrame/Dataset接口等。

Scala开发Spark程序所涉及的技术中,有的可能和开发Spark框架的技术重叠,例如Spark函数库的接口,在开发Spark程序时,强调的是如何使用 Scala 调用该接口,重点是接口的使用,包括函数名、传参、返回值;而在开发Spark框架时,强调的是如何实现该接口的功能,两者侧重点不同。

1.5.5 Scala语言基础

为了便于大家快速掌握 Scala 的基础语法和使用,本书精选 Scala 的知识点,编写了配套的《零基础快速入门Scala》免费电子书,关注公众号“艾叔编程”即可获取。