作为开发Spark重要的代码之一Scala,是学习Spark之前必须要了解到的一门语言,相比之前接触过的java,scala更像是一个面向对象+面向函数的编程语言,其中的函数非常丰富,代码机制非常简单,配合起Spark的开发可谓是得心应手,相同的功能模块下,scala仅仅只需要用几行就能代替java所写的相同内容;或许你会问到为什么不用python,spark的API兼容性与python非常差,许多API还没有需要自己去创建,创建的过程十分费工夫,所以在Spark开发中大多用到的是scala,其次是java。
本篇文章主要是写给自己复习回顾用的,不太适合么有编程基础的来阅读,有些地方写的比较深入,感谢大家的理解。
一、Scala的介绍
Scala的特性
1.java和scala可以混编。
2.类型推测,可以自动推测类型。
3.并发并且有分布式
4.特质特征
5.模式匹配
6.高阶函数
在Spark1.6中使用的是scala2.10,在Spark2.0版本以上使用的是scala2.11,Spark可以分为三大趋势,1.6以前,1.6+和2.0+,在后续的Spark学习中会介绍其中的底层区别。
二、Scala的基础
1.数据类型
- Byte:8bit的有符号数字,范围在-128~127之间
- Short:16bit的有符号数字,范围在-32768~32767之间
- Int:32bit的有符号数字
- Long:64bit的有符号数字,
- Float:32bit,单精度浮点数
- Double:64bit,双精度浮点数
- Char:16bit,Unicode字符,U+0000~U+FFFF
- String:字符串类型
- Boolean:布尔类型
- Unit:表示空值,和其他语言中void等同
- Null:空值或者空引用
- Nothing:所有类型的子类,表示没有值
- Any:所有类型的父类,任何实例都属于Any类型
- AnyRef、AnyVal:所有引用、值类型的父类
2.变量和常量的声明
/**
* 定义变量和常量
* 变量 :用 var 定义 ,可修改
* 常量 :用 val 定义,不可修改
*/
var name = "zhangsan"
println(name)
name ="lisi"
println(name)
val gender = "m"
// gender = "m"//错误,不能给常量再赋值
3.类和对象
创建类和对象
class Person{
}
//创建类
object Person1{
}
//创建对象
注意:object中不可以穿参,如果需要传参,要用apply方法
伴生类和对象
class Person(xname :String , xage :Int){
var name = Person.name
val age = xage
var gender = "m"
def this(name:String,age:Int,g:String){
this(name,age)
gender = g
}
def sayName() = {
"my name is "+ name
}
}
object Person {
val name = "zhangsanfeng"
def main(args: Array[String]): Unit = {
val person = new Person("wagnwu",10,"f")
println(person.age);
println(person.sayName())
println(person.gender)
}
}
输出:
10
my name is zhangsanfeng
f
注意点:
- scala 中的object是单例对象,相当于java中的工具类,可以看成是定义静态的方法的类。object不可以传参数。另:Trait不可以传参数
- scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。
重写构造函数的时候,必须要调用默认的构造函数。 - class 类属性自带getter ,setter方法。
- 使用object时,不用new,使用class时要new ,并且new的时候,class中除了方法不执行,其他都执行。
- 如果在同一个文件中,object对象和class类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。
4.if…else…
val age