一 总览
根据spark的论文,可以对spark提供的接口进行总览:
主题分为Transformations(产生RDD的操作)操作和Action(对RDD进行的计算)操作。
二 Trasformations总结
会有论文中的部分算子,和论文中没有的算子。
rdd.map() : 接受一个函数,把函数应用到RDD的每一个元素,返回新的RDD.
rdd.fileter() : 接受一个函数,把函数应用到RDD的每一个元素,如果元素符合函数,即函数返回的是true,则将该元素加入
新的RDD中。
rdd.flatMap() : flat(压扁),接受一个函数,将RDD的每个元素按照函数进行分割,返回的数组,将数组中的每个元素作为
新的RDD的元素。
集合运算:
distinct() : 去重,将RDD中相同的元素删除.
rdd1.union(rdd2) : 将两个RDD合并,RDD中元素的类型必须相同。
rdd1.intersection(rdd2) : 得出两个RDD的交集,形成一个新的RDD。
rdd1.subtract(rdd2) : 得到RDD1中,RDD2没有的元素,形成新的RDD。
KeyValue的RDD操作
平均分数计算:
val initialScores = Array(("Fred", 88.0), ("Fred", 95.0), ("Fred", 91.0), ("Wilma", 93.0), ("Wilma", 95.0), ("Wilma", 98.0))
val d1 = sc.parallelize(initialScores)
type MVType = (Int, Double) //定义一个元组类型(科目计数器,分数)
d1.combineByKey(
score => (1, score),
(c1: MVType, newScore) => (c1._1 + 1, c1._2 + newScore),
(c1: MVType, c2: MVType) => (c1._1 + c2._1, c1._2 + c2._2)
).map { case (name, (num, socre)) => (name, socre / num) }.collect
三 Action操作
散记:
rdd.foreach(println) :测试用的时候打印。
rdd.persist() : 如果后面还想重用这个rdd,则将这个rdd进行缓存,之后就不必为了得到这个rdd从头开始进行计算,有几个缓存级别。
val 声明变量:不可更改指向的对象
var 声明变量:可重新指向相同类型的变量