spark中算子详解:aggregateByKey
来源:互联网 发布:公安网络监控电路板 编辑:程序博客网 时间:2024/05/29 19:50
通过scala集合以并行化方式创建一个RDD
scala> val pairRdd = sc.parallelize(List(("cat",2),("cat",5),("mouse",4),("cat",12),("dog",12),("mouse",2)),2)
pairRdd 这个RDD有两个区,一个区中存放的是:
("cat",2),("cat",5),("mouse",4)
另一个分区中存放的是:
("cat",12),("dog",12),("mouse",2)
然后,执行下面的语句
scala > pairRdd.aggregateByKey(100)(math.max(_ , _), _ + _ ).collect
结果:
res0: Array[(String,Int)] = Array((dog,100),(cat,200),(mouse,200))
下面是以上语句执行的原理详解:
aggregateByKey的意思是:按照key进行聚合
第一步:将每个分区内key相同数据放到一起
分区一("cat",(2,5)),("mouse",4)分区二("cat",12),("dog",12),("mouse",2)
第二步:局部求最大值
对每个分区应用传入的第一个函数,math.max(_ , _),这个函数的功能是求每个分区中每个key的最大值
这个时候要特别注意,aggregateByKe(100)(math.max(_ , _),_+_)里面的那个100,其实是个初始值
在分区一中求最大值的时候,100会被加到每个key的值中,这个时候每个分区就会变成下面的样子
分区一("cat",(2,5,100)),("mouse",(4,100))然后求最大值后变成:("cat",100), ("mouse",100)分区二("cat",(12,100)),("dog",(12.100)),("mouse",(2,100))求最大值后变成:("cat",100),("dog",100),("mouse",100)
第三步:整体聚合
将上一步的结果进一步的合成,这个时候100不会再参与进来
最后结果就是:
(dog,100),(cat,200),(mouse,200)
阅读全文
0 0
- spark中算子详解:aggregateByKey
- Spark算子[09]:aggregateByKey、aggregate详解
- spark中算子详解:combineByKey
- Spark编程之基本的RDD算子-aggregate和aggregateByKey
- Spark操作—aggregate、aggregateByKey详解
- spark 算子combineByKey 详解
- spark 常用算子 详解
- Spark函数讲解:aggregateByKey
- Spark函数讲解:aggregateByKey
- Spark中算子
- Spark算子[08]:combineByKey详解
- spark aggregateByKey函数使用问题
- spark的aggregateByKey简单用法
- Spark RDD使用详解5--Action算子
- spark RDD操作算子详解(汇总)
- Spark算子执行流程详解之一
- Spark算子执行流程详解之二
- Spark算子执行流程详解之三
- Log4Net 在项目中的使用
- 将java程序部署到Linux服务器上
- AlertDialog.setMessage不显示的问题
- 10.接口限流
- spark解析hbase的xml字符串
- spark中算子详解:aggregateByKey
- rem自适应布局-移动端自适应必备:flexible.js
- iOS开发——Swift字符串替换 + HTML标签正则过滤 + 主线程非阻断延时
- 1047. 编程团体赛(20)——C语言
- Java maven打包 多个main方法
- 刷新头布局 帧动画的实现
- 在kali下使用gdb以源码方式调试glibc
- 共同学习Java源代码-数据结构-HashMap(六)
- 1秒识别汽车Vin码,告别手动录入