概述
在使用 Spark 时,很多的例子是使用 Scala 语言进行编写,因此有必要对 Scala 的语法与使用进行学习。
Scala 是面向对象、函数式、静态类型编程语言。
Scala 提供了命令行,可以以命令行方式执行。
Scala 可以运行于 JVM 环境,能够与 Java 语言很方便地交互,同样能够访问很多的 Java 库。
简单例子
表达式
|
|
值
使用 val 定义 (类似于常量)
|
|
变量
使用 var 定义
|
|
块
以 { } 包裹,注意块的值
···scala
println({
val a = 1 + 1
a + 1
}) // 输出 3
方法
方法与函数非常类似,但有几点关键的不同
- 方法使用
def定义,def之后跟上方法的名称,然后是参数列表,然后是返回值类型,最后是方法的内容
|
|
- 方法可以拥有多个参数列表,或者无参数列表
|
|
方法和函数在内容较多时可以使用块,但 Scala 没有 return 语句,返回值即为块的值
|
|
类
|
|
这里返回类型 Unit 与其他语言的 void 类似
case class
case class 默认是不可变 (immutable) 的,并以值来比较
|
|
实例化 case class 不需要使用 new 关键字,直接通过 == 比较
对象
对象类似于单实例的类,可以理解为静态类
|
|
Traits
Traits 可以包含字段与方法,多个 Traits 可以组合
|
|
主方法
程序的入口
|
|
类型
所有类型都继承自 Any,Any 有 equals、hashCode、toString 方法。Any 有两个子类,分别是 AnyVal 和 AnyRef 。AnyVal 是值类型的祖先,不能是 null, 有九个预定义的类型: Double、Float、Long、Int、Short、Byte、Char、Unit、Boolean。AnyRef 是引用类型的祖先,如果 Scala 运行与 JVM 环境, AnyRef 与 java.lang.Object 是一样的。
|
|
Nothing 类型是所有类型的子类型,Nothing 没有值Null 类型是所有引用类型的子类
类型转换
值类型可以从低范围的类型转换到高范围的类型
|
|
类
定义类
|
|
Getter/Setter 语法
|
|
在构造器中的参数,如果使用 val 或 var 修饰则代表他们是 public 的,否则则代表是 private 的。使用 val 修饰时不可被修改。
类型组合与混合
|
|
|
|
高阶函数
函数是函数式编程语言的一等公民,在 Scala 中,将使用函数作为参数或返回函数的方法和函数称为 “高阶函数”。
|
|
Scala 支持嵌套的函数与方法定义。
正则表达式
|
|
Scala 使用 """ 来使用多行字符串,注意第二行开始的 | ,最后使用 stripMargin 会将行首的 | 与其之前的空白去掉。
|
|