概述
对比
Hadoop
用java语言开发(java8 lamda表达式)
mapreduce Wordcount 70行左右
Spark
用Scala语言开发(函数式编程)
mapreduce Wordcount 1行
spark是hadoop的补充
Scala:
多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行与Java平台(Java虚拟机),
并兼容所有的java程序。
面向过程、面向对象、函数式编程
Scala优点:
支持函数式编程,编码也简洁
优雅、速度快(开发效率高)、能融合到Hadoop生态圈(spark是Scala编写的)
学会了Scala,Python同理
Scala编译器安装:
1、安装jdk
2、安装Scala编译器
http://www.scala-lang.org/
Scala:最新的是 1.12.4 目前公司里没有正式项目上main用这么高的版本
2.11.x 课程使用版本
2.10.x 好多公司在使用
tar -zxvf XXXX -C url
第一行代码:
HelloWorld.scala
object HelloWorld{
def main(args:Array[String]){
println("hello world !!")
}
}
编译:scalac HelloWorld.scala
运行:scala HelloWorld
开发工具:
IDEA
自动调节字体大小,按Ctrl加鼠标
scala语法:
变量声明
val变量(scala自动类型推断)
显式声明类型(强制声明) 变量名:类型=值
var变量
修改var变量值
不能修改val变量值,会报错!!
注:val声明的是不能改变的变量,而var声明变量后,值可以再次定义
常用数据类型:
Byte、Char、Short、Int、Long、Float、Double、Boolen
其他可以参考:www.runoob.com
条件表达式:
if
注:if条件语句是有返回值的,需要有变量去接收
他的返回值的数据类型会自动推断
在scala中,最后一行代码块就是返回值
循环:
while循环,scala中不支持++ -- 的操作
for循环:语法结构:for (i <- 表达式/数组/集合){ }
1 until 10 ---> 1-9,1 to 10 ---->1-10
在scala中,没有+-*/运算符的概念,全部都是方法,+方法
for中有:yield构建出一个集合,设置返回值
注:while的使用方式跟java一样
scala中没有++ --操作,如果要实现这样的操作,可以用a-=1操作
scala中没有运算符,都是方法,只不过这些方法名比较特别。
常用的表达式1 to 10 ,1 util 10
for循环的语法是,(for<- 表达式/集合/数组)
for循环支持多重for循环
for循环可以写if条件的表达式,并且表达式之前没有分号
如果我们想要for循环有返回值或者返回来一个新的集合在循环体前中用yield
调用方法和函数
定义方法
如果要=,就有返回值,没有=,就没有返回值
定义函数
匿名函数
声明一个函数
结果
注:方法和函数的区别:
函数可以像其他数据类型一样被传递和操作
方法里面有函数