入门 Spark 的路上很难不接触 Scala 。 Scala 似乎是为 java 提供了很多『类似函数式编程』的语法糖,这里记录一下这个语言独特的地方分享给读者朋友们。
文章目录

参考资料主要有:
- 曹洁 . Spark大数据分析技术(Scala版)[M]. 北京航空航天大学出版社, 2021. ISBN:9787512433854
- 陈欢 , 林世飞 . Spark最佳实践[M]. 人民邮电出版社, 2016. ISBN:9787115422286
Scala 基本思想与注意事项
Sacla 即 Scalable Language ,正如其名,是一门可伸缩的编程语言:
- 基于 java 的虚拟机( Scala 会被编译成 JVM 字节码)
- 但是既可以当脚本使用,又可以构造大型系统
- 是静态语言,但是可以像动态语言那样支持交互式编程
- 面型对象:每一个值都是对象,每一次运算都是一次方法调用
- 函数式编程:所有函数都是对象,函数是“一等公民”
- Scala 中几乎一切都是表达式
scala
是解释器, scalac
是编译器;可以直接 scala test.scala
,也可以 scalac test.scala & scala test
(先把源码编译为字节码,再把字节码放到虚拟机中解释运行)。还可用输入 scala
进入交换编程界面。
所以要注意的是,需要先安装 JDK ,并且设置好环境变量 JAVA_HOME
。此外,更加重要的是, Scala 小版本兼容:2.12.x
与 2.13.x
这两者不兼容,2.12.10
与 2.12.11
才兼容。
最基本的语法示例
类型的声明、控制结构(for、模式匹配、case)
// 变量
val two: Int = 1 + 1
var one: Int = 1
var one: String = 'one'
// 函数
def addOne(x: Int): Int = x + 1
def add(x: Int, y: Int): Int = {
x + y
}
// 部分控制结构
var filename =
if (!args.isEmpty) args(0)
else "default.txt"
for (i <- 1 to 4)
println("iteration " + i)
1 to 4
是 [1,2,3,4]
,而 i until 4
是 [1,2,3]
。
关于 for
还有一些奇技淫巧。
// 多个区间
for (a <- 1 to 2; b <- 1 to 2) {
println("a: " + a + ", b: " + b)
}
// 结果
a: 1, b: 1
a: 1, b: 2
a: 2, b: 1
a: 2, b: 2
// 过滤器
val list1 = List(3, 5, 2, 1, 7)
for (x <- list1 if x % 2 == 1) print(" " + x)
// 3 5 1 7
关于模式匹配,则有更多奇技淫巧。这里我直接参考:scala中case的用法
// 一.简单匹配,值匹配:
val bools = List(true, false)
for (bool <- bools) {
bool match {
case true => println("heads")
case false => println("tails")
case _ => println("something other than heads or tails (yikes!)")
}
}
import scala.util.Random
val randomInt = new Random()