Spark中groupBy groupByKey reduceByKey的区别

Posted Python,Docker,Linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark中groupBy groupByKey reduceByKey的区别相关的知识,希望对你有一定的参考价值。

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的区别的主要内容,如果未能解决你的问题,请参考以下文章

spark sql DataFrame 的 groupBy+agg 与 groupByKey+mapGroups

spark sql DataFrame 的 groupBy+agg 与 groupByKey+mapGroups

saprk的groupby和groupbykey的区别

Spark API 详解/大白话解释 之 groupBy、groupByKey

Spark 中的 GroupByKey 函数有那么糟糕吗? [复制]

spark 例子groupByKey分组计算