spark RDD算子(五)之键值对聚合操作combineByKey

博客介绍了在分布式数据集上实现聚合操作的关键——`combineByKey`。`combineByKey`通过`createCombiner`初始化键对应的累加器,`mergeValue`合并相同键的新值,以及`mergeCombiners`整合不同分区的累加器结果。以计算学生平均成绩为例,展示了在Scala和Java中如何应用此方法。
摘要由CSDN通过智能技术生成

combineByKey
聚合函数一般在集中式数据比较方便,如果涉及到分布式的数据集,该如何去实现呢;这里介绍一下combineByKey,这个是各种聚集操作的鼻祖
简要介绍

def combineByKey[C] (createCombiner: (V) => C,
mergeValue: (C,V) => C,
mergeCombiners: (C,C) => C): RD

cerateCombiner:combineByKey()会遍历分区中的所有元素,因此每个元素的键要么还没有遇到过,要么就和之前的某个元素的键相同。如果这是一个新的元素,combineByKey()会使用一个叫做createCombiner()的函数来创造那个键对应的累加器的初始值
mergeValue:如果这是一个在处理当前分区之前已经遇到的键,他会使用mergeValue()方法将该键的累加器对应的当前值与这个新的值进行合并
mergeCombiners:由于每个分区都是独立处理的,因此对于同一个键可以有多个累加器。如果有两个或者更多的分区都有对应同一个键的累加器,就需要使用用户提供的mergeCombiners()方法将各个分区的结果进行合并。
计算学生平均成绩例子:
创建一个学生成绩说明的类
scala版本:

case class ScoreDetail(studentName: String, subject: Dtring, score: Float)
def main(args: Array[String]): Unit = {
   
    val conf = new SparkConf().setMaster("local[*]").setAppName("combinebykey")
    val sc = SparkContext.getOrCreate(conf)
    val scores = List(
      ScoreDetail("Aythna","Music",96),
      ScoreDetail("Aythna","Math",92),
      ScoreDetail("Tomoyo","English",97),
      ScoreDetail("Tomoyo","Science",90),
      ScoreDetail("LiSA","Sports",94),
      ScoreDetail("LiSA","Music",99),
      ScoreDetail("Ninja","Music",92),
      ScoreDetail("Ninja","Sports",96),
      ScoreDetail("Sino","Music",95),
      ScoreDetail
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值