博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark算子篇 --Spark算子之aggregateByKey详解
阅读量:5221 次
发布时间:2019-06-14

本文共 1198 字,大约阅读时间需要 3 分钟。

一。基本介绍

rdd.aggregateByKey(3, seqFunc, combFunc) 其中第一个函数是初始值

3代表每次分完组之后的每个组的初始值。

seqFunc代表combine的聚合逻辑

每一个mapTask的结果的聚合成为combine

combFunc reduce端大聚合的逻辑

ps:aggregateByKey默认分组

二。代码

from pyspark import SparkConf,SparkContextfrom __builtin__ import strconf = SparkConf().setMaster("local").setAppName("AggregateByKey")sc = SparkContext(conf = conf)rdd = sc.parallelize([(1,1),(1,2),(2,1),(2,3),(2,4),(1,7)],2)def f(index,items):    print "partitionId:%d" %index    for val in items:        print val    return items    rdd.mapPartitionsWithIndex(f, False).count()def seqFunc(a,b):    print "seqFunc:%s,%s" %(a,b)    return max(a,b) #取最大值def combFunc(a,b):    print "combFunc:%s,%s" %(a ,b)    return a + b #累加起来'''    aggregateByKey这个算子内部肯定有分组'''aggregateRDD = rdd.aggregateByKey(3, seqFunc, combFunc)rest = aggregateRDD.collectAsMap()for k,v in rest.items():    print k,vsc.stop()

 

三。详细逻辑

PS:

seqFunc函数 combine篇。

3是每个分组的最大值,所以把3传进来,在combine函数中也就是seqFunc中第一次调用 3代表a,b即1,max(a,b)即3 第二次再调用则max(3.1)中的最大值3即输入值,2即b值 所以结果则为(1,3)

底下类似。combine函数调用的次数与分组内的数据个数一致。

 

combFunc函数 reduce聚合

在reduce端大聚合拉完数据后也是先分组,然后再调用combFunc函数

四。结果

持续更新中。。。。,欢迎大家关注我的公众号LHWorld.

 

转载于:https://www.cnblogs.com/LHWorldBlog/p/8215529.html

你可能感兴趣的文章
【洛谷 P1666】 前缀单词 (Trie)
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>