spark action 算子

action算子为执行算子,触发Spark作业的运行,真正触发转换算子的计算

 

1.reduce(func):通过函数func先聚集各分区的数据集,再聚集分区之间的数据,func接收两个参数,返回一个新值,新值再做为参数继续传递给函数func,直到最后一个元素。

2.collect():以数据的形式返回数据集中的所有元素给Driver程序,为防止Driver程序内存溢出,一般要控制返回的数据集大小。

3.first():返回数据集的第一个元素

6.top(n):按默认或者指定的排序规则返回前n个元素,默认按降序输出。

7.takeOrdered(n,[ordering]): 按自然顺序或者指定的排序规则返回前n个元素

take:可以传入参数,返回的也是一个数组,就算是n=1,返回的也是一个仅有一个元素的数组,同样,对数据集的数据类型和是否有序没有任何规定

例:

def main(args: Array[String]) {

    val conf = new SparkConf().setMaster("local").setAppName("reduce")

    val sc = new SparkContext(conf)

    val rdd = sc.parallelize(1 to 10,2)

    val reduceRDD = rdd.reduce(_ + _)

    val reduceRDD1 = rdd.reduce(_ - _) //如果分区数据为1结果为 -53

    val countRDD = rdd.count()

    val firstRDD = rdd.first()

    val takeRDD = rdd.take(5)    //输出前个元素

    val topRDD = rdd.top(3)      //从高到底输出前三个元素

    val takeOrderedRDD = rdd.takeOrdered(3)    //按自然顺序从底到高输出前三个元素

 

    println("func +: "+reduceRDD)

    println("func -: "+reduceRDD1)

    println("count: "+countRDD)

    println("first: "+firstRDD)

    println("take:")

    takeRDD.foreach(x => print(x +" "))

    println("\ntop:")

    topRDD.foreach(x => print(x +" "))

    println("\ntakeOrdered:")

    takeOrderedRDD.foreach(x => print(x +" "))

    sc.stop

  }

输出:

func +: 55

func -: 15 //如果分区数据为1结果为 -53

count: 10

first: 1

take:

2 3 4 5

top:

9 8

takeOrdered:

2 3

 

8.countByKey():作用于K-V类型的RDD上,统计每个key的个数,返回(K,K的个数)

9.collectAsMap():作用于K-V类型的RDD上,作用与collect不同的是collectAsMap函数不包含重复的key,对于重复的key。后面的元素覆盖前面的元素

 

10.lookup(k):作用于K-V类型的RDD上,返回指定K的所有V值

 

11.aggregate(zeroValue:U)(seqOp:(U,T) => U,comOp(U,U) => U):

seqOp函数将每个分区的数据聚合成类型为U的值,comOp函数将各分区的U类型数据聚合起来得到类型为U的值

def main(args: Array[String]) {

    val conf = new SparkConf().setMaster("local").setAppName("Fold")

    val sc = new SparkContext(conf)

    val rdd = sc.parallelize(List(1,2,3,4),2)

    val aggregateRDD = rdd.aggregate(2)(_+_,_ * _)

    println(aggregateRDD)

    sc.stop

  }

输出:

90

步骤1:分区1:zeroValue+1+2=5   分区2:zeroValue+3+4=9

 

步骤2:zeroValue*分区1的结果*分区2的结果=90

 

12.fold(zeroValue:T)(op:(T,T) => T):通过op函数聚合各分区中的元素及合并各分区的元素,op函数需要两个参数,在开始时第一个传入的参数为zeroValue,T为RDD数据集的数据类型,,其作用相当于SeqOp和comOp函数都相同的aggregate函数

 

13.saveAsFile(path:String):将最终的结果数据保存到指定的HDFS目录中

 

14.saveAsSequenceFile(path:String):将最终的结果数据以sequence的格式保存到指定的HDFS目录中

 

15、foreach

foreach算子,参数为传入的函数,对于数据集中的每个元素,都实现该函数,有点类似于map,但是能够返回结果。

 

spark Action算子先写到这里,后续在更新。

 

 

转载于:https://my.oschina.net/u/3233205/blog/1927634

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值