1、算子概述
- 什么是算子
实质就是映射
- 算子的重要作用
灵活实用
- MapReduce 与 Spark算子比较
MapReduce只有2个算子,Map和Reduce,绝大多数应用场景下,均需要复杂编码才能达到用户需求。
Spark有80多个算子,进行充分的组合应用后,能满足绝大多数的应用场景。
2、Spark算子介绍与应用
1 转换算子
2 行动算子
3. 常用算子分析与应用
转换算子:
1.value型转换算子:
输入分区和输出分区一对一型
` map算子
val first=sc.parallelize(1 to 5,2) first.map(1 to _).collect
flatMap算子
val first = sc.parallelize(1 to 5,2) first.flatMap(1 to _).collect
mapPartition算子
glom算子::
以分区为单位,将每个分区的值形成一个数组
val a = sc.parallelize(Seq("one","two","three","four","five","six","seven"),3) a.glom.collect Array[Array[String]] = Array(Array(one, two), Array(three, four), Array(five, six, seven))
输入分区与输出分区多对一型
union算子
将两个Rdd合并成一个RDD,并不去重
val a = sc.parallelize(1 to 4, 2) val b = sc.parallelize(3 to 6, 2) a.union(b).collect (a ++ b).collect (a union b).collect Array[Int] = Array(1, 2, 3, 4, 3, 4, 5, 6)
输入分区与输出分区多对多型
groupby
val a =sc.parallelize(Seq(1,2,3,4,5,67,854,23424),3) a.groupBy(x=>{if(x>5)">5" else"<=5"}).collect Array[(String, Iterable[Int])] = Array((<=5,CompactBuffer(1, 2, 3, 4, 5)), (>5,CompactBuffer(67, 854, 23424)))
filter算子 白名单
val a =sc.parallelize(1 to 21 ,3) val b = a.filter(_ % 4 == 0) b.collect Array[Int] = Array(4, 8, 12, 16, 20)
distinct 去重
cache算子
主要将RDD元素从磁盘缓存到内存.
val a = sc.parallelize(1 to 4, 2) val b = sc.parallelize(3 to 6, 2) val c = a.union(b).cache c.count c.distinct().collect
key-value型转换算子
1)mapValues算子
针对(key,value)里的value进行处理
val first = sc.parallelize(List(("张一",1),("张二",2),("张三",3),("张四",4)),2) val second= first.mapValues(x=>x+1) second.collect
2)combineByKey
3)reduceByKey
val first = sc.parallelize(List("小米", "华为", "小米", "小米", "华为", "苹果"), 2) val second = first.map(x => (x, 1)) second.reduceByKey(_ + _).collect
4)join算子
这个类似于sql中的 inner join
五.行动算子
无输出型:不落地到文件或是hdfs的作用
foreach算子 val first = sc.parallelize(List("小米", "华为", "小米", "小米", "华为", "苹果"), 2) first.foreach(println)
hdfs输出型
saveAsTextFile算子
val RDD= sc.parallelize(List("小米", "华为", "小米", "小米", "华为", "苹果"), 2) RDD.saveAsTextFile("file:///home/zhaodefan/text/")
Scala集合和数据类型
collect算子



