spark之action算子

first() count() reduce()

    @Test
    def test3(): Unit ={

        val rdd1: RDD[(String, Int)] = sc.makeRDD(Array(("A",1),("B",2),("C",3)))

        println(rdd1.first()) //返回第一个元素 ("A",1)
        println(rdd1.count()) //返回元素个数 3

        val rdd2: RDD[Int] = sc.makeRDD(1 to 10,2 )
        val i: Int = rdd2.reduce(_ + _) //作用于每个元素 这里求和 55
        println(i)
    }

aggregate

    /**
      * def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U)
      * 1 to 6 两个分区 分别是 (1,2,3)    (4,5,6)
      *
      * seqOpRDD中每个分区中的T 类型元素聚合成U类型 再使用combOp将之前的每个分区聚合后的U类型 聚合成U类型,特别注意的是seqOpcomOp都会使用zeroValue的之
      * 分区一中zeroValue+1+2+3   = 1+1+2+3 = 7
      * 分区二中zeroValue+4+5+6   = 1+4+5+6 = 16
      * 再将分区中的结果合并(comOp) zeroValue+1+分区1中聚合的之+分区2中聚合的值 = 1 + 7 + 16 = 24
      */
    @Test
    def test4(): Unit ={
        val rdd1: RDD[Int] = sc.makeRDD(1 to 6,2)

        val i: Int = rdd1.aggregate(1)(
            { (x: Int, y: Int) => x + y }, { (a: Int, b: Int) => a + b }
        )
        println(i)
               //和aggregate的结果一样
        val i1: Int = rdd1.fold(1)((x, y) => x+y)
        println(i1)
    }

foreachPartition

    /**
      * foreachPartition和foreach类似,对每一个分区使用f
      * 打印值为 6 和 16每个分区中的总和
      */
    @Test
    def test6(): Unit ={
        val rdd1: RDD[Int] = sc.makeRDD(1 to 6,2)

        rdd1.foreachPartition((iter:Iterator[Int])=>{
            var i = 0
            while (iter.hasNext){
                val i1: Int = iter.next()
                i  += i1
            }
            println(i)
        })
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值