本文意在收集整理网络上对Spark讲解比较好的博文,希望能发挥一个“Spark字典”的作用。
先列出一个比较好的入门级Spark教程:厦门大学数据库实验室的Spark教程。
第一部分:Scala基础
1. if语句
Scala中的if表达式的值可以直接赋值给变量。
val x = 6
val a = if (x>0) 1 else -1 // a的值为1
2. for循环
Scala中的for循环语句格式如下,其中,“变量<-表达式”被称为“生成器(generator)”。这里,i不需要提前进行变量声明,可以在for语句括号中的表达式中直接使用。
for (i <- 1 to 5) println(i) // for (变量<-表达式) 语句块
for (i <- 1 to 5 by 2) println(i) // 使用by来控制设置步长,这里i取值为1、3、5
for (i <- 1 to 5; j <- 1 to 3) println(i*j) // for循环的多生成器,相当于双重for循环
for循环中的yield关键字会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala中的yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个数组中。这种带有yield关键字的for循环,被称为“for推导式”。
scala> for (i <- 1 to 5) yield i
res: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5)
3. 数组Array
val intArray = new Array[Int](3) // 声明一个长度为3的整型数组,每个数组元素初始化为0
在Scala中,对数组元素的应用,使用的是圆括号intArray(0),而不是方括号intArray[0],这一点和Java是不同的。
4. 列表List
val intList = List(1,2,3) // 声明一个列表
:: 方法被称为cons,意为构造,具有右结合的特性,向队列的头部追加数据,创造一个新的列表。用法为 x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1。
x::list等价于list.::(x)
Scala中,列表中各个元素必须是相同类型,Nil表示空列表。
Scala可以使用 ::: 方法对不同的列表进行连接得到一个新的列表。
List的遍历可以采用for循环的方式,也可以采用Java里面foreach的方式:
// for循环遍历列表
val list = List(1, 2, 3, 4, 5)
for (elem <- list) println(elem)
5. 元组Tuple
val tuple = ("scala", 2020, 2020.01) // 声明一个元组,只需要用圆括号把多个元组的元素括起来就可以了
元组是不同类型的值的聚集也就是说元组可以包含不同类型的元素。
当需要访问元组中的某个元素的值时,可以通过类似tuple._1、tuple._2、tuple._3这种方式实现。
6. 集合Set
var set = Set("Hadoop","Spark") // 声明一个集合,默认是不可变集合;声明一个可变集,则需要引入scala.collection.mutable.Set包
set += "Scala" // 向set中增加新的元素
集合Set是不重复元素的集合,集合中的元素是以hash的方式进行存储的,方便快速地找到某个元素。
集合分为可变集合和不可变集合。
想要在集合中进行插入删除等操作,若声明的是不可变集合,需使用var标识,此时的操作会产生一个新的集,原来的集并不会发生变化;若声明的是可变集合,使用val标识即可,此时改变的是该集合本身。
7. 映射Map
val events = Map("A" -> "click", "B" -> "view","C"->"skip") // 声明一个Map
val value = events("A") // 可以使用key来获取Map中这个key对应的value
在Scala中的Map是一系列键值对的集合,以key-value的形式进行存储。与Set类似,Scala中的Map包括可变和不可变两种,默认情况下创建的是不可变Map,如果需要创建可变Map,需要引入scala.collection.mutable.Map包。
Map可以直接使用key来进行一些操作,如增加元素、