6.Action算子操作

本文介绍了Spark中的Action算子,包括Foreach、Take和TakeOrdered。Action算子用于触发RDD的计算,并将结果输出或返回。Foreach用于遍历RDD并执行指定操作;Take获取RDD的前n个元素;TakeOrdered则按特定顺序返回前n个元素。
摘要由CSDN通过智能技术生成

Action算子是spark作业执行的动因,也就是说transformation要想执行,就需要action去触发,通常就将RDD的数据输出到外部的存储介质,或者返回给Driver。

Foreach

//执行action操作
//        rbk.foreach() 
//遍历该rdd中的每一条记录,该操作是在executor中的partition上面完成
        /**
          * 将rdd的数从executor中拉取到driver端进行操作(全量数据的拉取)
          * 需要注意的是:执行collect操作,可能存在OOM的异常风险
          * 如果我们要想将数据从rdd中拉取到dirver中
          * 要么先filter,过滤一部分数据,再拉取,要么执行其他操作,比如take,first,takeOrdered
          * TopN
          *     如果该RDD数据是有序的,使用take(N)---->TopN
          */
          */
        //将rdd的数据从executor中拉去到driver端进行操作
        val results:Array[(String, Int)] = rbk.collect()   
        for (elem <- results) {
            println(elem)
        }

Take

println("-------------take---------------")
        /**
          * 如果我们要想将数据从rdd中拉取到dirver中
          * 要么先filter,过滤一部分数据,再拉取,要么执行其他操作,比如take,first,takeOrdered
          * TopN
          *     如果该RDD数据是有序的,使用take(N)---->TopN
          */
        val takes:Array[(String, Int)] = rbk.take(2)
        for(t <- takes) {
            println(t)
        }

TakeOrdered

       println("-------------takeOrdered---------------")
        /**
          *  获取的通过排序,找到前N个值
          *  按照的次数的降序排列
          */

        //隐式转换参数
        implicit val ord = new Ordering[(String, Int)](){
            /**
              * 升序,就是前面的比后面
              * 降序,就是后面的比前面
              */
            override def compare(x: (String, Int), y: (String, Int)) = {
                y._2.compareTo(x._2)
            }
        }
        //这里会调用上面的隐式转换参数
        val orders:Array[(String, Int)] = rbk.takeOrdered(2)


显示传递方式:
val orders:Array[(String, Int)] = rbk.takeOrdered(2)(new Ordering[(String, Int)](){
            /**
              * 升序,就是前面的比后面
              * 降序,就是后面的比前面
              */
            override def compare(x: (String, Int), y: (String, Int)) = {
                y._2.compareTo(x._2)
            }
        })

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值