spark python初学(一)对于reduceByKey的理解
来源:互联网 发布:java 游戏服务器架构 编辑:程序博客网 时间:2024/06/06 03:52
reduceByKey(func) 是pairRDD的转化操作,目的是合并具有相同键的值。我一直不理解。可能我太笨了,今天突然开窍了。。
# -*- coding:UTF-8 -*-from __future__ import print_functionfrom pyspark import SparkContextfrom pyspark import SparkConfconf = SparkConf().setMaster("local").setAppName("chapter4")sc = SparkContext(conf=conf)num = sc.parallelize([1, 4, 2, 3, 4, 4, 2, 4])pairs = num.map(lambda x: (x, 1)) # 针对每个数进行计数1的操作,print(pairs.collect()) #输出为列表,每个列表中都是一个二元组,key为每个数,value都为1a = pairs.reduceByKey(lambda x, y: x+y+1) # b = pairs.reduceByKey(lambda x, y: x+y+2)c = pairs.reduceByKey(lambda x, y: x+y+3)print(a.collect())print(b.collect())print(c.collect())输出
[(1, 1), (4, 1), (2, 1), (3, 1), (4, 1), (4, 1), (2, 1), (4, 1)][(1, 1), (2, 3), (3, 1), (4, 7)][(1, 1), (2, 4), (3, 1), (4, 10)][(1, 1), (2, 5), (3, 1), (4, 13)]
pair RDD中包含二元组,所以需要传递的函数应当操作二元组而不是独立的元素 ,所以lambda后面跟的都是x,y
而key=2的二元组对应了两个(2,1)(2,1),value1=1,value2=1,key=4的二元组有4个:(4,1)(4,1)(4,1)(4,1),value1=1,value2=1,value3=1,value4=1。这两个key就会执行lambda函数。
对于a来说,执行x+y+1,这个语句怎么理解呢? --》 对于每个相同的key,其value相加并加1,那么key=2: 就有value1+value2+1 = 1+1+1=3。key=4: 就有value1+value2+1 +value3+1+value4+1= 1+1+1+1+1+1+1=7;
对于b来说,执行x+y+2 --》 对于每个相同的key,其value相加并加2,那么key=2: 就有value1+value2+2 = 1+1+2=5。key=4: 就有value1+value2+2 +value3+2+value4+2= 1+1+2+1+2+1+2=10;
对于c来说,执行x+y+3 --》 对于每个相同的key,其value相加并加3,那么key=2: 就有value1+value2+1 = 1+1+1=3。key=4: 就有value1+value2+3+value3+3+value4+3= 1+1+3+1+3+1+3=13;
如果写的不对,希望大家指正。
- spark python初学(一)对于reduceByKey的理解
- spark reduceByKey的小问题
- 初学java,对于MVC模式的理解
- 对于java多线程的理解(一)
- 自己对于python的理解
- 初学Python(一)
- 初学Python(一)
- Python初学(一)
- 初学Python(一)
- 初学python(一)
- [spark]groupbykey reducebykey
- spark ReduceByKey操作
- spark--transform算子--reduceByKey
- Maven初学理解(一)
- spark python初学(一)针对某个单词计数版本0
- spark python初学(一)针对某个单词计数版本1
- Spark编程的基本的算子之:combineByKey,reduceByKey,groupByKey
- 参考别人的分析对于Volley的理解(一)
- Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationEx
- RGB色盘
- PHP常用函数
- 日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
- nodeJS之crypto加密
- spark python初学(一)对于reduceByKey的理解
- 最近开发项目的总结
- 冒泡排序
- OpenAirInterface安装说明
- 栈的压入、弹出序列(判断弹出序列是否正确)
- mui滚动选项卡-加强版
- kaldi的triphone训练详解
- 《番茄工作法》
- kmp算法 汇总