码迷,mamicode.com
首页 > 其他好文 > 详细

Spark中groupBy groupByKey reduceByKey的区别

时间:2018-01-26 20:58:40      阅读:1255      评论:0      收藏:0      [点我收藏+]

标签:bubuko   聚合   cat   col   body   gpo   使用   spark   distinct   

groupBy

和SQL中groupby一样,只是后面必须结合聚合函数使用才可以。

例如:

hour.filter($"version".isin(version: _*)).groupBy($"version").agg(countDistinct($"id"), count($"id")).show()
groupByKey

对Key-Value形式的RDD的操作。

例如(取自link):

val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "spider", "eagle"), 2)
val b = a.keyBy(_.length)//给value加上key,key为对应string的长度
b.groupByKey.collect
//结果 Array((4,ArrayBuffer(lion)), (6,ArrayBuffer(spider)), (3,ArrayBuffer(dog, cat)), (5,ArrayBuffer(tiger, eagle)))
reduceByKey

与groupByKey功能一样,只是实现不一样。本函数会先在每个分区聚合然后再进行总的统计,如图:

技术分享图片

而groupByKey则是

技术分享图片

因此,本函数比groupByKey节省了传播的开销,尽量少用groupByKey

参考

Spark中groupBy groupByKey reduceByKey的区别

标签:bubuko   聚合   cat   col   body   gpo   使用   spark   distinct   

原文地址:https://www.cnblogs.com/wswang/p/8360755.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!