Scala为什么是大数据第一高薪语言
为什么是scala
虽然在大数据领域java的使用更普及,python也有后来居上的势头,但scala一直有着不可动摇的地位。我们熟悉的spark,kafka,flink都是由scala完成了其核心代码的开发。
所以掌握scala不仅可以学习大数据组件的源码,而且会极大的提升大数据开发的效率。
这也是scala的薪资水平一直遥遥领先的原因。
根据2019年全球编程语言薪资统计,排名前几名的scala无疑是岗位需求与收入同样优秀的语言。当然收入与地域之间也是有区别的,比如在美国,scala 的收入最高,可以达到 143k 美元,其次是 clojure(139k 美元)、go(136k 美元)、erlang(135k 美元)、objective-c(132k 美元)
该数据根据 stack oveflow2019 年关于编程语言薪酬排行开发者调查报告得出
为什么会有这么高的薪资?
这恐怕是源于scala的特点:
-
优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,api是否优雅直接影响用户体验。
-
速度快:scala语言表达能力强,一行代码抵得上java多行,开发速度快;scala是静态编译的,所以和jruby,groovy比起来速度会快很多。
-
能融合到hadoop生态圈:hadoop现在是大数据事实标准,spark并不是要取代hadoop,而是要完善hadoop生态。jvm语言大部分可能会想到java,但java做出来的api太丑,或者想实现一个优雅的api太费劲。
这也是为什么很多大数据组件的源码都是scala开发的原因。
掌握scala以后,我们可以飞速的开发flink,spark等大数据工程,开发效率得到极大的提高,而且使用函数式编程,代码也会更简洁,炫酷。
什么是scala
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主要特性如下:
1、运行于jvm和javascript之上
scala利用了jvm的高性能,而且也把java丰富的工具和类库为其所用。不过scala并不是仅仅支持jvm,scala-js已经支持scala运行于js之上!
scala-js是将scala编译成js的编译器,目的在于使用scala的众多类库和强类型特征构建出稳定可扩展的js应用。
2、静态类型
在scala语言中,静态类型(static typing)是构建健壮应用系统的一个工具。scala修正了java类型系统中的一些缺陷,此外通过类型推演(typeinference)也免除了大量冗余代码。
动态语言和静态语言
-
动态类型语言:是指在运行期才去做数据类型检查的语言。在用动态言语编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。python和ruby就是一种典型的动态类型语言。
-
静态类型语言:与动态类型语言刚好相反,它的数据类型检查发生在编译阶段,也就是说在写程序时要声明变量的数据类型。c、c++、c#、java都是静态类型语言的典型代表。
强类型语言与弱类型语言
-
强类型语言:使之强制数据类型定义的语言。没有强制类型转化前,不允许两种不同类型的变量相互操作。强类型定义语言是类型安全的语言,如java,c#和python,比如java中的“int i = 0.0”是无法通过编译的。
-
弱类型语言:数据类型可以被忽略的语言。与强类型语言相反,一个变量可以赋不同数据类型的值,允许将一块内存看做多种类型,比如直接将整型变量与字符变量相加。javascript,php都是弱类型语言。
注意、强类型语言在速度上逊色于弱类型语言,使用弱类型语言可节省很多代码量,有更高的开发效率。而对于构建大型项目,使用强类型语言可能会比使用弱类型更加规范可靠。
3、混合式编程范式——面向对象编程,函数式编程
scala完全支持面向对象编程(oop)。引入了特征(trait)改进了java的对象模型。trait能通过使用混合结构(maxin composition)简洁的实现新的类型。在scala中,一切都是对象,即使是数值类型。
scala也完全的支持函数式编程(fp),函数式编程已经被视为解决并发、大数据以及代码正确性问题的最佳工具。使用不可变值、函数、高阶函数以及函数集合,有助于编写出简洁、强大而又正确的代码。
函数式编程更关心数据的映射,运用函数式编程,比如用spark进行wordcount,只需要一行代码
sc.textfile("/home/centos/test.txt").flatmap(_.split(" ")).map((_,1)).reducebykey(_ + _).collect
4、复杂的类型系统
scala对java类型进行了扩展,提供了更灵活的泛型以及一些有助于提高代码正确性的改进。通过使用类型推演。scala编写的代码能够和动态的类型语言编写的代码一样精简。
5、简洁、优雅、灵活的语法
使用scala之后,java中冗长的表达式不见了,取而代之的是简洁的scala方言。scala提供了一些工具,这些工具可用于构建领域特定语言(dsl),以及对用户友好的api接口。
6、可扩展的架构
使用scala,能编写出简短的解释性脚本,并将其粘合成大型的分布式应用。以下四种语言机制有助于提升系统的扩展性:
- 使用trait实现的混合结构
- 抽象类型成员和泛型
- 嵌套类
- 显式自类型(self type)
scala与java有着紧密的关系,可以把scala看做是java的升级版,而这些优势也让scala拥有了巨大竞争优势
scala与java关系
scala有着其独特的魅力,在加上大数据,流计算开发的增多,scala有着越来越丰富的用武之地,所以很难说我们会因为scala选择了大数据,还是因为大数据选择了scala。
转自:https://www.cnblogs.com/tree1123/p/12672057.html
上一篇: 使用ElasticSearch赋能HBase二级索引总结
下一篇: Hadoop入门之hdfs