今天我們來學習一下Spark的一個行動算子countByKey而账。先去API中看一下:
此算子的作用是計算每一個key的元素個數(shù),并且把結(jié)果保存到一個Map中鸽嫂。
實測一下:
import org.apache.spark.{SparkConf, SparkContext}
object testCountByKey {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("test").setMaster("local[*]")
val sc = new SparkContext(conf)
val rdd1 = sc.parallelize(Array(1,2,3,4,5,6,1,2,3,4,5,6))
val map = rdd1.map((_,1)).countByKey()
println(map)
sc.stop()
}
}
輸出結(jié)果:
補充:
countByKey的源碼:思路很簡單,就是先把rdd的value都變成1,然后reduceByKey揽涮,在通過collect行動算子拉取到driver,最后toMap轉(zhuǎn)換成一個Map類型