虽然在大数据领域Java的使用更普及,Python也有后来居上的势头,但Scala一直有着不可动摇的地位。咱们熟悉的Spark,Kafka,Flink都是由Scala完成了其核心代码的开发。javascript
因此掌握Scala不只能够学习大数据组件的源码,并且会极大的提高大数据开发的效率。java
这也是Scala的薪资水平一直遥遥领先的缘由。程序员
根据2019年全球编程语言薪资统计,排名前几名的Scala无疑是岗位需求与收入一样优秀的语言。固然收入与地域之间也是有区别的,好比在美国,Scala 的收入最高,能够达到 143k 美圆,其次是 Clojure(139k 美圆)、Go(136k 美圆)、Erlang(135k 美圆)、Objective-C(132k 美圆)编程
该数据根据 Stack Oveflow2019 年关于编程语言薪酬排行开发者调查报告得出centos
为何会有这么高的薪资?安全
这恐怕是源于Scala的特色:架构
优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。并发
速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,因此和JRuby,Groovy比起来速度会快不少。app
能融合到Hadoop生态圈:Hadoop如今是大数据事实标准,Spark并非要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java作出来的API太丑,或者想实现一个优雅的API太费劲。框架
这也是为何不少大数据组件的源码都是Scala开发的缘由。
掌握Scala之后,咱们能够飞速的开发Flink,Spark等大数据工程,开发效率获得极大的提升,并且使用函数式编程,代码也会更简洁,炫酷。
Scala产生于瑞士的洛桑联邦理工学院(EPEL),是“可扩展语言”(Scalable Language)的缩写,Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各类特性。你可使用Scala编写出更加精简的程序,也能用于构建大型复杂系统,还能够访问任何Java类库而且与Java框架进行交互。
经过官网咱们看到对于Scala的描述:
Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.
Scala利用了JVM的高性能,并且也把Java丰富的工具和类库为其所用。不过Scala并非仅仅支持JVM,Scala-Js已经支持Scala运行于Js之上!
scala-js是将scala编译成js的编译器,目的在于使用scala的众多类库和强类型特征构建出稳定可扩展的js应用。
在Scala语言中,静态类型(static typing)是构建健壮应用系统的一个工具。Scala修正了Java类型系统中的一些缺陷,此外经过类型推演(typeinference)也免除了大量冗余代码。
动态语言和静态语言
动态类型语言:是指在运行期才去作数据类型检查的语言。在用动态言语编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言。
静态类型语言:与动态类型语言恰好相反,它的数据类型检查发生在编译阶段,也就是说在写程序时要声明变量的数据类型。C、C++、C#、Java都是静态类型语言的典型表明。
强类型语言与弱类型语言
强类型语言:使之强制数据类型定义的语言。没有强制类型转化前,不容许两种不一样类型的变量相互操做。强类型定义语言是类型安全的语言,如Java,C#和Python,好比Java中的“int i = 0.0”是没法经过编译的。
弱类型语言:数据类型能够被忽略的语言。与强类型语言相反,一个变量能够赋不一样数据类型的值,容许将一块内存看作多种类型,好比直接将整型变量与字符变量相加。JavaScript,PHP都是弱类型语言。
注意、强类型语言在速度上逊色于弱类型语言,使用弱类型语言可节省不少代码量,有更高的开发效率。而对于构建大型项目,使用强类型语言可能会比使用弱类型更加规范可靠。
Scala彻底支持面向对象编程(OOP)。引入了特征(trait)改进了Java的对象模型。trait能经过使用混合结构(maxin composition)简洁的实现新的类型。在Scala中,一切都是对象,即便是数值类型。
Scala也彻底的支持函数式编程(FP),函数式编程已经被视为解决并发、大数据以及代码正确性问题的最佳工具。使用不可变值、函数、高阶函数以及函数集合,有助于编写出简洁、强大而又正确的代码。
函数式编程更关心数据的映射,运用函数式编程,好比用Spark进行WordCount,只须要一行代码
sc.textFile("/home/centos/test.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect
Scala对Java类型进行了扩展,提供了更灵活的泛型以及一些有助于提升代码正确性的改进。经过使用类型推演。Scala编写的代码可以和动态的类型语言编写的代码同样精简。
使用Scala以后,Java中冗长的表达式不见了,取而代之的是简洁的Scala方言。Scala提供了一些工具,这些工具可用于构建领域特定语言(DSL),以及对用户友好的API接口。
使用Scala,能编写出简短的解释性脚本,并将其粘合成大型的分布式应用。如下四种语言机制有助于提高系统的扩展性:
Scala与Java有着紧密的关系,能够把Scala看作是Java的升级版,而这些优点也让Scala拥有了巨大竞争优点
Scala与Java关系
Scala有着其独特的魅力,在加上大数据,流计算开发的增多,Scala有着愈来愈丰富的用武之地,因此很难说咱们会由于Scala选择了大数据,仍是由于大数据选择了Scala。
下一章,咱们将从头开始学习Scala,未完待续~
更多大数据,实时计算相关博文与科技资讯,欢迎搜索或者扫描下方关注 “实时流式计算”