1、算子概述
什么是算子
实质就是映射
算子的重要作用
灵活实用
MapReduce 与 Spark算子比较
MapReduce只有2个算子,Map和Reduce,绝大多数应用场景下,均需要复杂编码才能达到用户需求。
Spark有80多个算子,进行充分的组合应用后,能满足绝大多数的应用场景。
1.转换算子(Transformation)
此种算子不触发提交作业,只有作业被提交后才会真正启动转换计算。
* Value型转换算子:其处理的数据项是Value型
o 输入分区与输出分区一对一型
map算子
flatMap算子
mapPartitions算子
glom算子
o 输入分区与输出分区多对一型
union算子
cartesian算子
o 输入分区与输出分区多对多型
groupBy算子
o 输出分区为输入分区子集型
filter算子
distinct算子
subtract算子
sample算子
takeSample算子
o Cache型
cache算子
persist算子
* Key-Value型转换算子:其处理的数据是Key-Value型
o 输入分区与输出分区一对一
mapValues算子
o 对单个RDD聚集
combineByKey算子
reduceByKey算子
partitionBy算子
o 对两个RDD聚集
cogroup算子
o 连接
join算子
leftOutJoin算子
rightOutJoin算子
### 2.行动算子(Action)
此种算子会触发SparkContext提交作业。
* 无输出(是指不输出hdfs、本地文件当中)
o foreach算子
* HDFS
o saveAsTextFile算子
o saveAsObjectFile算子
* Scala集合和数据类型
o collect算子
o collectAsMap算子
o reduceByKeyLocally算子
o lookup算子
o count算子
o top算子
o reduce算子
o fold算子
o aggregate算子
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算子