Scala学习系列(一)——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。
下一章,我们将从头开始学习Scala,未完待续~
更多大数据,实时计算相关博文与科技资讯,欢迎搜索或者扫描下方关注 “实时流式计算”

Scala学习系列(一)——Scala为什么是大数据第一高薪语言的更多相关文章
- 【每天五分钟大数据-第一期】 伪分布式+Hadoopstreaming
说在前面 之前一段时间想着把 LeetCode 每个专题完结之后,就开始着手大数据和算法的内容. 想来想去,还是应该穿插着一起做起来. 毕竟,如果只写一类的话,如果遇到其他方面,一定会遗漏一些重要的点 ...
- Hadoop 大数据第一天
大数据第一天 1.Hadoop生态系统 1.1 Hadoop v1.0 架构 MapReduce(用于数据计算) HDFS(用于存储数据) 1.2 Hadoop v2.0 架构 MapReduce(用 ...
- 大数据之R语言速成与实战
什么是R语言? R语言由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两人共同发明.其词法和语法分别源自Scheme和S语言. R定义:一个能够自有有效的用于统计计算和绘图的 ...
- Scala学习系列(三)——入门与基础
本课程源码共享于 https://github.com/tree1123/learning-scala 首先,打开IDEA编辑器的SbtExampleProject项目,我们将在这个项目下进行练习 本 ...
- [原创]Scala学习:编写Scala脚本
scala支持脚本 1)在/opt/scala-script下创建一个文件hello.scala 编辑内容如下: $ hello ,this is the first scala script 2)运 ...
- SPSS学习系列之SPSS Statistics导入读取数据(多种格式)(图文详解)
不多说,直接上干货! SPSS Statistics导入读取数据的步骤: 文件 -> 导入数据 成功! 欢迎大家,加入我的微信公众号:大数据躺过的坑 免费给分享 同时,大 ...
- 学习推荐《零起点Python大数据与量化交易》中文PDF+源代码
学习量化交易推荐学习国内关于Python大数据与量化交易的原创图书<零起点Python大数据与量化交易>. 配合zwPython开发平台和zwQuant开源量化软件学习,是一套完整的大数据 ...
- 软件架构设计学习总结(4):大数据架构hadoop
摘要:Admaster数据挖掘总监 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海 ...
- 大数据平台R语言web UI应用架构 设计与开发
1. 系统拓扑图 在日常业务分析中,R是非常常用的分析工具,而当数据量较大时,用R语言需要需用更多的时间来完成训练模型,spark作为大规模数据处理框架,采用内存计算,可以短时间内完成大量的数据的处理 ...
随机推荐
- frida报错frida.InvalidArgumentError: device not found问题解决方案
一.问题描述 python安装好frida框架后,在安卓端启动了frida-server,启动要hook的应用,在cmd中执行python脚本,报错frida.InvalidArgumentE ...
- 基于springcloud搭建项目-Feign篇(四)
上一篇已经写过ribbon客户端负载均衡的用法了,这篇主要是介绍feign的用法,首先我们必须了解feign是什么?能干嘛?怎么用? 这里简单介绍一下,然后进行代码测试 1.概述 Feign是一个声明 ...
- win7下firefox和chrome升级到最新版之后页面打不开的解决办法
一.升级firefox到最新版后,页面崩溃,打开是空白页,连选项设置都打不开了. 最开始是我的firefox很久没升级,最近要要开始做开发,于是最让它自动升级.等升级到最新版本后,打开浏览器是结果显示 ...
- 内网渗透之权限维持 - MSF与cs联动
年初六 六六六 MSF和cs联动 msf连接cs 1.在队伍服务器上启动cs服务端 ./teamserver 团队服务器ip 连接密码 2.cs客户端连接攻击机 填团队服务器ip和密码,名字随便 ms ...
- 使用ajax提交登录
引入jquery-1.10.2.js或者jquery-1.10.2.min.js 页面 <h3>后台系统登录</h3> <form name="MyForm&q ...
- MyISAM 和 InnoDB
1.MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级 ...
- js 实现字符串的查找和替换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Dubbo之服务暴露
前言 本文 Dubbo 使用版本2.7.5 Dubbo 通过使用dubbo:service配置或@service在解析完配置后进行服务暴露,供服务消费者消费. Dubbo 的服务暴露有两种: 远程暴露 ...
- SOFARPC模式下的Consul注册中心
Consul大家不陌生,就是和Zookeeper.Nacos一伙的,能够作为微服务基础架构的注册中心,算是比较成熟的组件,和Springcloud集成顺滑, 考虑到Eureka已经停止更新,所以有必要 ...
- AI学习笔记:人工智能与机器学习概述
一.人工智能基本概念 1.1 基本概念 数据分析:对历史规律的展现.对未来数据的预测. 机器学习:机器学习是指从一系列的原始数据中找到规律,提取人们可以识别的特征,然后通过学习这些特征,最终产生一个模 ...