1.8 Spark和Scala

本文来自艾叔编著的《零基础快速入门Scala》免费电子书,添加文末艾叔微信,获取完整版的PDF电子书

1.8  Spark和Scala

Spark框架本身是使用Scala开发的,Scala是一种小众语言,个性十分鲜明,有的人使用了它之后,非常喜欢,觉得世间再无其它语言。而有的人用过之后,又会觉得非常痛苦。

那么,Scala有什么特点?为什么当时要选择Scala来开发Spark框架呢?对于我们自身来说,是选择Scala来开发Spark应用程序,还是采用Spark所支持的其它语言,如Java、Python?本节将回答这些问题。

1.8.1  为什么用Scala开发Spark框架

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

Spark作者的论文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》中解释了原因。

We chose to use Scala due to its combination of conciseness (which is especially useful for interactive use) and

efficiency (due to static typing). However, nothing about the RDD abstraction requires a functional language; it

would also be possible to provide RDDs in other languages by using classes to represent the user’s functions,as is

 done in Hadoop

翻译成中文,选择Scala开发Spark是因为它同时具备:简洁高效这两个特点。

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

高效:Scala本质上是静态类型语言,它被编译成Java的字节码,在JVM上运行,效率和Java是差不多的,因此是高效的。

因此,使用Scala作为Spark开发语言,是因为Scala的简洁和高效,并不是因为它支持函数式编程。

1.8.2  为什么用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.8.3  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框架时,强调的是如何实现该接口的功能,两者侧重点不同。

加艾叔微信,加入Linux(Shell+Zabbix)、大数据(Spark+Hadoop)、云原生(Docker+Kubernetes)技术交流群

1.8 Spark和Scala_第1张图片

关注艾叔公众号,获取更多一手信息

1.8 Spark和Scala_第2张图片

你可能感兴趣的:(scala,spark,java,big,data,大数据)