【spark】二 reduceByKey、reduceByKeyLocally、groupByKey、combineByKey、aggregateByKey 区别 [待补充]

版权声明:转载请标明出处。 https://blog.csdn.net/u010720408/article/details/89358901

DataFrame pyspark 只有groupByKey,容易在shuff中爆掉,改用RDD的reduceByKey、aggregateByKey相关算子

对类似实现sql的group by的相关算子进行区别分析
一:DataFrame.groupBy() 操作不会在partition中自己合并计算,会整个分组后进行shullf,
如下一个partition数据
groupBy()前:

key value
a 1
b 4
a 2
c 5
a 3

groupBy()后

key value
a 1
a 2
a 3
key value
b 4
key value
c 5

一起进行shuff网络传输,针对亿级数据,百万个key,或者key对应值有百万个太耗内存,所以官网推荐使用rdd的reduce/reduceByKey操作

二:reduceByKey实现groupBy
reduceByKey(add)后:

key value
a 6
b 4
c 5

进行传输,这样现在本地合并计算,所以占用内存和网络传输都小。

注意与reduce进行区别,reduceByKey是相同的key进行合并计算,而reduce则是所有的都合并计算
即使用reduce(add)后:(add是已有的一种累加函数,可以自定义方法,传递得是上一个元素与丢面元素的value,add就是两个相加,sub就是相减)

value
15

三:reduceByKey与reduceByKeyLocall区别
reduce/reduceByKey 得到的结果返回对象都是RDD[K,V]形式;
reduceByKeLocal得到的返回对象是Map[Key,Value]形式。

四:combineByKey是实现reduceByKey/groupBy的更底层的高阶函数,可进一步自定义合并计算函数(可实现平均数等操作)
查看combineByKey的介绍:https://www.jianshu.com/p/b77a6294f31c

五:aggregateByKey
也是一套高阶的map/reduce操作的的东西,区别于aggregate来对相同的key进行聚合操作计算。
查看aggregateByKey的介绍:https://www.jianshu.com/p/09912beb1350

猜你喜欢

转载自blog.csdn.net/u010720408/article/details/89358901
今日推荐