RDD操作之combineByKey

本文详细介绍了Spark中combineByKey函数的工作原理及其应用场景。该函数通过三个步骤处理数据:首先使用createCombiner为每个键创建初始组合器;接着利用mergeValue在每个分区内部合并值;最后运用mergeCombiners跨分区合并组合器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

combineByKey

   combineByKey  接收三个参数,分别为createCombiner、mergeValue、mergeCombiners

      createCombiner:用于产生累加器键的初值。如lambda x:(x,1),实现输入RDD[(K,V)]中V到结果RDD[(K,C)]中C的转换,V                                   和C可以相同,也可能不同

      mergeValue: 每移动一条记录设置当前的累加的值(将V合并到C中)

      mergeCombiners:在每一键组内累加相应值

我来给大家看下列子:

                     

我转换了一个文件,在这里没有写出来,但看到我使用map拆分后看到了out[25]里面的数,这就是我们的文件数据,然后再来看到In [26]里面的代码,combineByKey里面的参数我都换成了函数,

 运行步骤和规则:

            第一步:

                  fun1()

                  这是根据值(V)来进行算的,也和分区有关

                  这里会得到一个序列[('f',(78,1)),('m',(90,1))],这个序列是虚拟的,其实真正的结果是[(75.1),(90,1)],只不过计算机会                   计算相同的键对应的每个值

            第二步:

                  fun2()

                  如果当K已经遇到过,使用mergeValue()会将当前的(K,V)进行合并,并进一步生成累加列表

                  x[0] 表示RDD列表中的值,一个个取出,和y相加,y在这里相当于sum,列y=y+x[0]

                  x[1]+1是代表加了几次,我们的结果中也显示出来了,这个和分区有关,但我们这里不考虑分区,

                  这里就会得出[('f',(515,6)),('m',(400,5))] (假设就一个分区)

            第三步;

                  fun3()

                  把每个分区的结果进一步求和,最终得到我们的结果,也叫将相同的累加值进行合并。

                  因为会有多个分区,每个分区都有对应同一个键的累加值,所以要把各个分区的结果进行合并。

                  

    

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值