导读
要问当下最热门的IT技术,大数据可占一席之地;要问当下最网红的IT岗位,数据分析师也必将榜上有名。二者结合,自然就是大数据分析师。所谓大数据分析,个人理解就是在传统数据分析思维和技能的基础上,加持大数据工具,而Spark作为一个优秀的分布式计算框架,自然可作为大数据分析的必备技能。进一步地,虽然Spark提供了4种主流语言,其中不乏Python这种网红,但Scala作为Spark的原生开发语言,仍不失为应用Spark开发的首选。
基于以上考虑,我终于还是入坑了Scala的学习之旅——尽管Scala实际上属于一门小众语言,小众到似乎除了Spark甚至没什么用武之地!
本文作为Scala系列开篇之作,主要分享3个问题:
- Scala是一门什么样的语言?
- Scala具有哪些特点?
- Scala开发环境如何搭建?
01 Scala是一门什么样的语言
要回答这个问题,核心关键词有两个:面向对象和函数式编程。引用官网的原文就是:
代码语言:javascript复制Scala combines object-oriented and functional programming
in one concise, high-level language.
其中:
面向对象应该是当前绝大多数主流编程语言的通用范式,重点是支持类和对象的概念——其中类是抽象的,定义了一组变量和方法和集合体,由类生产出的就是对象,这个过程也叫实例化,所以理解类和对象二者的关系就相当于:类是生产线,生产出的产品叫对象。而支持这种类和对象的编程语言,则称作面向对象。一般而言,与面向对象相对应的词叫作面向过程,或者说不支持封装类和对象、一般需要完整定义整个执行过程的方式来完成模块化的编程语言。典型的例子就是C语言是面向过程的,而C 则是面向对象。
函数式编程也不是Scala首创或独有特性,例如Python中其实就能寻见函数式的踪影,据说Java8以后版本也逐渐支持这一理念。那么何为函数式编程呢,通俗地讲,就是可将函数以普通变量的身份作为其他方法的入参或返回值,用Scala官方描述词汇叫Functions are first-class objects. ,即函数是一等公民!
进一步地,由于Scala支持这两种编程理念,故而叫做多范式编程语言。那么哪种理念更为先进或者说重要的,其实这本身是个伪命题——因为本无孰优孰劣之别。但就个人理解而言,函数式编程特性显然对于成就Scala作为Spark的首选语言更为重要,或许这会是在了解Scala和Spark的诸多相似算子之后的感悟。
02 Scala具有哪些特点
Scala除了是一门支持多范式的编程语言,还具有哪些特点呢?之于这一问题,我想原原本本的引用官方的概括就好,毕竟这是最为权威也是足够的:
逐一而论:
- 与Java一脉相承。实际上,Scala是基于Java基础之上的一门语言,创立之初的动机在于对Java的一些特性不满,想改进并成为Java替代首选。实际上,Scala不仅完成了对Java特性的精进,也可以直接引用和继承Java的类库。相当于说,Java有的Scala也可以有,反之Scala比Java更简洁。
Scala创始人Martin Odersky
- 类型推断机制。实际上,Scala中精简Java语法的一个重要举措就是支持类型推断,所以在声明变量时可无需指定变量类型,而交由解释器根据变量取值自动推断。(这与Python中的缺省变量类型的理念还不一致)
- 并行化和分布式。即支持数据的并行和分布式计算,得益于actor通信机制,未来将进一步支持异步编程。这与Spark的分布式计算理念真是一致。
- 特质(Trait)。一贯类比的是Java接口,实际上就是可以在特质中先声明变量和方法,但不指定具体操作,而等待后继者再完成具体定义。实际上是为了方便于类的继承。
- 模式匹配。类似于多数编程语言中的switch…case…,个人对此尚未发现独特优势
- 高阶函数。所谓高阶函数,就是支持将函数当做普通变量一样作为其他函数/方法的入参或返回值,这也是函数式编程的具体体现。
03 Scala开发环境如何搭建
工欲善其事,必先利其器。在了解了Scala语言的几个宏观特性之后,那么则需考虑搭建一个Scala编程环境,以期后续编程实战。
前文提到,Scala实际上是一个基于Java基础之上的编程语言,更准确地说类似于Java运行于JVM(Java Virtual Machine, Java虚拟机),Scala其实也是运行在JVM上的(不然怎么实现与Java无缝继承呢),所以搭建Scala环境首先需要安装Java环境,而后再安装Scala语言环境即可。具体而言:
- 安装JDK8。纵然当前Java版本已更新到15版本,但JDK8仍然是稳定和经典的首选。实际上,Scala当前最新版是2.13,而不同Scala版本与JDK版本间的支持关系如下:
JDK8仍然是经典之选
- 安装Scala。Scala目前最新大版本是2.13,考虑后续与Spark的兼容性和稳定性等问题,实际安装2.11或2.12更为合适。访问Scala官网(https://www.scala-lang.org/),根据系统类型选择合适版本即可
正常情况下,安装完Scala安装程序后,会自动将Scala加入到系统环境变量中,打开cmd,键入scala,稍等片刻即可看到进入到scala的原生shell环境,个人认为这是学习初期最好的尝试语法的IDE。
当然,更为专业的Scala IDE是Idea,其与Pycharm同为捷克软件公司JetBrains出品,支持多种编程语言,包括Java和Scala。与Pycharm区分专业版(付费)和社区版(开源)类似,Idea也区分付费和开源的两个版本,即旗舰版和社区版,一般而言社区版虽然功能受限但对普通开发者而言是足够的。安装过程也较为常规,前往JetBrains Idea官网(https://www.jetbrains.com/idea/)选择Idea Community下载即可。下载后,还需完成3步配置与安装,即:
- 安装scala插件:settings->plugins,搜索scala安装即可,安装完成后一般需要restart
- 配置JDK8路径:File->Project Structure->SDKs,点击 按钮选择add JDK即可
- 配置Scala SDK路径:File->Project Structure->Global Libraries,点击 按钮选择Scala SDK即可。
最后,随手就是一个hello, world!