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")