pyspark-combineByKey详解
来源:互联网 发布:淘宝怎么看卖家信用 编辑:程序博客网 时间:2024/06/06 18:41
最近学习Spark,我主要使用pyspark api进行编程,
网络上中文的解释不是很多,api官方文档也不是很容易明白,我结合自己的理解记录下来,方便别人参考,也方便自己回顾吧
本文介绍的是pyspark.RDD.combineByKey
combineByKey(createCombiner, mergeValue, mergeCombiners, numPartitions=None, partitionFunc=<function portable_hash at 0x7f1ac7340578>)
它是一个泛型函数,主要完成聚合操作,将输入RDD[(K,V)]转化为结果RDD[(K,C)]输出
例如:
x = sc.parallelize([('B',1),('B',2),('A',3),('A',4),('A',5)])createCombiner = (lambda el: [(el, el**2)])mergeVal = (lambda aggregated, el : aggregated + [(el, el**2)])mergeComb = (lambda agg1, agg2 : agg1 + agg2)y = x.combineByKey(createCombiner, mergeVal, mergeComb)print(x.collect())print(y.collect())打印结果如下:
[('A', [(3, 9), (4, 16), (5, 25)]), ('B', [(1, 1), (2, 4)])]
主要有三个参数需要自己实现,分别是
createCombiner:实现输入RDD[(K,V)]中V到结果RDD[(K,C)]中C的转换, V和C可能是相同类型,也可能是不同类型,如上例中的createCombiner
它会创建一个元素列表
mergeValue:将V合并到C中
它会将当前值添加到元素列表的末尾
mergeCombiners:对mergeValue产生的C进一步合并,即是reduce操作
它会将两个C合并到一起
combineByKey的处理流程如下:
遍历RDD[(K,V)]中每一个元素
1、如果当前K是一个新元素,使用createCombiner()创建K为键的累加器初始值,生成列表[('A',(3,9))], [('B',(1,1))]
2、如果当前K已经遇到过,使用mergeValue()将当前(K,V)合并进第1步生成的累加器列表,,
生成[('A',(3,9)),('A',(4,16)),('A',(5,25)) , ('B',(1,1,)), ('B', (2,4))]
否则执行第1步
3、将相同键值的累加器进行合并,得到[('A', [(3, 9), (4, 16), (5, 25)]), ('B', [(1, 1), (2, 4)])]
因此得到如下结果:
[('A', [(3, 9), (4, 16), (5, 25)]), ('B', [(1, 1), (2, 4)])]
分析完毕!
以上内容不一定完全正确,只是能够帮助对该api的理解和使用吧
参考资料
1、https://spark.apache.org/docs/1.6.1/api/python/pyspark.html?highlight=combinebykey#pyspark.RDD.combineByKey
2、http://blog.csdn.net/dream_angel_z/article/details/51620438
- pyspark-combineByKey详解
- pyspark-combineByKey详解
- combineByKey实例详解
- spark 算子combineByKey 详解
- pyspark中combineByKey的两种理解方法
- Spark之combineByKey详解Java
- spark中算子详解:combineByKey
- Spark算子[08]:combineByKey详解
- combineByKey
- pyspark-histogram详解
- Pyspark的HBaseConverters详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark RDD操作:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Atitit RSA非对称加密原理与解决方案
- Swift中的required修饰符
- Codeforce 723A - The New Year: Meeting Friends
- Weiss-(DSAA - in C,2.12)最大子序列求和
- MySQL 之 count(*) 与 count(1)
- pyspark-combineByKey详解
- 工作总结23 tomcat启动不了项目原因
- Monkey测试批处理
- Android 中点击两次返回键才退出
- 使用Amoeba实现MySQL的主从读写分离
- Atitti.数字证书体系cer pfx attilax总结
- C++函数重载
- hdu 1533 最小费用最大流模板题
- Android遇到setTextColor无效的解决办法