一、算子概述
1、什么是算子
-
2、算子的重要作用
-
3、MapReduce与Spark算子比较
MapReduce只有两个算子,map和reduce,绝大场景下需要进行复杂的编码才可以实现业务逻辑
-
二、Spark算子介绍与应用
1、算子分类
1、转换算子(Transformation)
①value型
Map:给定一个输入,通过map操作映射到一个新的元素输出
- flatMap:给定一个输入,将所有结果打平成一个一维集合
- glom:以分区为单位,每个分区形成一个数组
- mapPartition:map操作是以每个元素为单位进行计算,mapPartition以分区进行计算
- union:将两个RDD合成一个RDD,不去重
- groupBy:输入与输出分区多对多
- filter:过滤筛选
- distinct:全局去重
cache算子:将RDD元素从磁盘缓存到内存,下次需要可以直接取
②key-value型
mapValues:针对(k,v)中的v进行map操作,而不对k进行操作
- combineByKey:
createCombiner:对每个分区内的同组元素如何聚合,形成一个累加器
mergeValue:将前边的累加器与新遇到的值进行合并的方法
mergeCombiners:每个分区都是独立处理,故同一个键可以有多个累加器。如果有两个或者更多的分区都有对应同一个键的累加器,用方法将各个分区的结果进行合并。
- reduceByKey:按Key聚合后按组进行规约,如求和,连接等
join:对k进行相当于inner join的操作,对v进行打平
2、行动算子(Action)
此类型的算子会触发SparkContext提交作业,触发RDD的执行
①无输出型:不落地到文件或者HDFS的操作
-
②HDFS输出型
-
③Scala集合和数据类型
-
④collectAsMap算子
-
⑤lookup算子
-
⑥reduce算子
先对两个元素进行reduce函数操作,然后将结果和迭代器取出的下一个元素进行reduce函数操作,直到迭代器遍历完所有元素,得到最后结果。
⑦fold算子
//和是41,公式=(1+2+3+4+5+6+10)+10
sc.parallelize(List(1, 2, 3, 4, 5, 6), 1).fold(10)(+)
//和是51,公式=(1+2+3+10)+(4+5+6+10)+10=51
sc.parallelize(List(1, 2, 3, 4, 5, 6), 2).fold(10)(+)
//和是61,公式=(1+2+10)+(3+4+10)+(5+6+10)+10=61
sc.parallelize(List(1, 2, 3, 4, 5, 6), 3).fold(10)(+)