Spark Action操作

集合标量行动操作:

  • first():T 表示返回RDD中的第一个元素,不排序
  • count():Long 表示返回RDD中的元素个数
  • reduce(f:(T,T)=>T):T 根据映射函数f,对RDD中的元素进行二元计算
  • collect():Array[T] 表示将RDD转换成数组。
  • take(num:Int):Array[T] 表示获取RDD中从0到num-1下标的元素,不排序。
  • top(num:Int):Array[T] 表示从RDD中,按照默认(降序)或者指定的排序规则,返回前num个元素。排序。
  • takeOrdered(num:Int):Array[T]和top类似,只不过以和top相反的顺序返回元素。
  • aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U用户聚合RDD中的元素,先使用seqOp将RDD中每个分区中的T类型元素聚合成U类型,在使用comOp将之前每个分区聚合后的U类型聚合成U类型,特别注意seqOP和comOP都会使用zeroValue的值。
  • fold(zeroValue: T)(op: (T, T) => T): T fold是aggregate的简化,将aggregate中的seqOp和combOp合并成一个函数op。
 val rdd5 = sc.parallelize(1 to 10, 2)
    rdd5.mapPartitionsWithIndex(
      (partIdx, iter) => {
        var part_map = scala.collection.mutable.Map[String, List[Int]]()
        while (iter.hasNext) {
          var part_name = "part_" + partIdx
          var elem = iter.next()
          if (part_map.contains(part_name)) {
            var elems = part_map(part_name)
            elems ::= elem
            part_map(part_name) = elems
          } else {
            part_map(part_name) = List[Int] {
              elem
            }
          }
        }
        part_map.iterator
      }
    ).collect()
    // Array[(String, List[Int])] = Array((part_0,List(5, 4, 3, 2, 1)), (part_1,List(10, 9, 8, 7, 6)))

    /**
      * def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U
      * 计算过程:先在每个分区中迭代执行 (x: Int, y: Int) => x + y,并且使用zeroValue的值,
      * 即part_0中:zeroValue+5+4+3+2+1
      * 即part_1中:zeroValue+10+9+8+7+6
      * 再将两个分区的结果使用(a: Int, b: Int) => a + b进行合并,并且也是要zeroValue
      * 即 zeroValue+part_0+part_1
      */
    rdd5.aggregate(0)(
      { (x: Int, y: Int) => x + y }, { (a: Int, b: Int) => a + b }
    )
    //res23: Int = 55

 rdd5.fold(0)(
      (x, y) => x + y
    )
    //res24: Int = 55


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值