Spark算子

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算子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值