第五章_Spark核心编程_Rdd_转换算子_keyValue型_reduceByKey

 


1. 定义

复制代码
  /*
  * 1. 定义
  *    def reduceByKey(func: (V, V) => V): RDD[(K, V)]
  *    def reduceByKey(func: (V, V) => V, numPartitions: Int): RDD[(K, V)]
  *    def reduceByKey(partitioner: Partitioner, func: (V, V) => V): RDD[(K, V)]
  *
  * 2. 功能
  *    按照相同的 Key 对 Value 进行聚合
  *    传输的函数为聚合规则(相对于MapReduce中的reduce函数)
  *
  * 3. note
  *   1. 发送到reduce端聚合时,会在Map端预聚合(自动触发)
  *   2. 只能操作 key-value类型的Rdd
  *   3. 不指定分区器时,使用默认分区器和分区个数和父Rdd相同
  *   4. scala语言中一般的聚合操作都是两两聚合,spark基于scala开发的,所以它的聚合也是两两聚合
  *   5. 当key 只要一个元素时,参数函数时不会参与运算的
* 6. 指定的分区器和分区个数,是对聚合结果的处理 * *
*/
复制代码

2. 示例

复制代码
object RddTransitionOperator_reduceByKey extends App {
  private val sc: SparkContext = CommonUtils.getSparkContext("zip operator")

  private val rdd: RDD[(String, Int)] = sc.parallelize(List(("word", 1), ("word", 2), ("豆", 3), ("豆", 4)), 1)

  // 使用默认分区器 + 分区个数等于父rdd分区个数
  private val rdd3: RDD[(String, Int)] = rdd.reduceByKey((v1, v2) => v1 + v2)

  println(s"分区个数:${rdd3.getNumPartitions}")
  println(s"类名:${rdd3.getClass.getName}")
  println(s"依赖类型:${rdd3.dependencies}")
  //  分区个数:1
  //  类名:org.apache.spark.rdd.ShuffledRDD
  //  依赖类型:List(org.apache.spark.ShuffleDependency@acdcf71)

  println(rdd3.collect.mkString(","))
  //1,2,3,3,7

  // 使用默认分区器 + 指定rdd分区个数
  private val rdd4: RDD[(String, Int)] = rdd.reduceByKey((v1, v2) => v1 + v2, 3)

  println(s"分区个数:${rdd4.getNumPartitions}")
  println(s"类名:${rdd4.getClass.getName}")
  println(s"依赖类型:${rdd4.dependencies}")
  //  分区个数:3
  //  类名:org.apache.spark.rdd.ShuffledRDD
  //  依赖类型:List(org.apache.spark.ShuffleDependency@6631cb64)

  // 使用指定分区器
  private val rdd5: RDD[(String, Int)] = rdd.reduceByKey(new HashPartitioner(2), (v1, v2) => v1 + v2)

  println(s"分区个数:${rdd5.getNumPartitions}")
  println(s"类名:${rdd5.getClass.getName}")
  println(s"依赖类型:${rdd5.dependencies}")

  //sc.stop()
  //while (true) {}
}
复制代码

 

posted @   学而不思则罔!  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示