Title

Spark Action算子简介

Action 用来触发RDD的计算,得到相关计算结果

Action触发Job。一个Spark程序(Driver程序)包含了多少 Action 算子,那么
就有多少Job;
典型的Action算子: collect / count
collect() => sc.runJob() => ... => dagScheduler.runJob() => 触发了Job

主要有:

  • collect() / collectAsMap()

  • stats / count / mean / stdev / max / min

    // 返回统计信息。仅能作用 RDD[Double] 类型上调用
    val rdd1 = sc.range(1, 101)
    rdd1.stats
    val rdd2 = sc.range(1, 101)
    // 不能调用
    rdd1.zip(rdd2).stats
    // count在各种类型的RDD上,均能调用
    rdd1.zip(rdd2).count
    
  • reduce(func) / fold(func) / aggregate(func)

    scala> rdd1.reduce(_+_)
    res39: Long = 5050
    scala> rdd1.fold(1)(_+_)
    res41: Long = 5063
    ## 定义初值  1,每个分区局部汇总+初值,全局汇总+初值   加了13次
    scala> rdd1.getNumPartitions
    res42: Int = 12
    scala> rdd1.aggregate(1l)(_+_,_+_)
    res44: Long = 5063
    
  • first():Return the first element in this RDD

  • take(n):Take the first num elements of the RDD

  • top(n):按照默认(降序)或者指定的排序规则,返回前num个元素。

    scala> rdd1.first
    res46: Long = 1
    
    scala> rdd1.take(5)
    res47: Array[Long] = Array(1, 2, 3, 4, 5)
    
    scala> rdd1.top(5)
    res48: Array[Long] = Array(100, 99, 98, 97, 96)
    
  • takeSample(withReplacement, num, [seed]):返回采样的数据

    scala> rdd1.takeSample(true, 4)
    res50: Array[Long] = Array(86, 86, 56, 99)
    
    scala> rdd1.takeSample(false, 4)
    res51: Array[Long] = Array(91, 34, 18, 52)
    
  • foreach(func) / foreachPartition(func):与map、mapPartitions类似,区别是 foreach 是 Action

    scala> rdd1.foreach(x => println(x))
    12
    13
    ....
    
  • saveAsTextFile(path) / saveAsSequenceFile(path) / saveAsObjectFile(path)

    scala> rdd1.saveAsTextFile("/aa/x.txt")
    
    
posted @ 2021-09-23 23:39  apeGcWell  阅读(621)  评论(0编辑  收藏  举报