说明
统计 RDD(单值类型,如:List) 每个元素出现的次数
返回 Map类型:
- key:RDD 中的元素
- value:元素出现的次数
声明
def countByValue()(implicit ord: Ordering[T] = null): Map[T, Long] = withScope {
map(value => (value, null)).countByKey()
}
注意: 通过源代码可知,排序 ord 没用上,可以理解为:假排序
底层实现
def countByValue()(implicit ord: Ordering[T] = null): Map[T, Long] = withScope {
map(value => (value, null)).countByKey()
}
def countByKey(): Map[K, Long] = self.withScope {
self.mapValues(_ => 1L).reduceByKey(_ + _).collect().toMap
}
例子
val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)
val rdd:RDD[String] = sc.makeRDD( List( "李雷","韩梅梅","lucy","李雷","lucy" ) )
val res:collection.Map[String,Long]=rdd.countByValue()
res.foreach(println)
sc.stop()
执行结果:
(李雷,2)
(韩梅梅,1)
(lucy,2)