spark3.0教程:RDD行动算子countByValue()

说明

统计 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)

原文出处:/show_1IX1O0TKr1G0.html