Spark SQL中Group By子句的底层实现是什么?我知道Spark支持下面两种类型的Group by操作,即GroupByKey和ReduceByKey。ReduceByKey是一种map side reduce,它提供了比GroupByKey更好的性能。
在我们的应用程序代码中,我们在Spark Dataframe上使用Spark SQL,而不是直接创建RDDs。所以,我想到了这个问题,Spark SQL中的GroupBy是做GroupByKey还是ReduceByKey,还是别的什么。
发布于 2019-08-30 12:50:15
在Spark SQL中,如果您在agg
中使用一些聚合函数调用groupBy(key).agg(...)
,则典型的物理计划是HashAggregate -> Exchange -> HashAggregate。第一个HashAggregate
负责执行部分聚合(在每个executor上本地执行),然后Exchange
表示shuffle,然后第二个HashAggregate
表示shuffle之后的最终聚合(最终合并)。
还要注意,根据聚合函数和聚合列的数据类型,有时HashAggregate
可能会被SortAggregate
或ObjectHashAggregate
替换,但模式保持不变(它们成对出现,中间有Exchange
)。
此外,如果预先重新划分了数据(可能来自missing或来自以前的聚合等),则有时Exchange
可能会丢失(没有混洗)。
https://stackoverflow.com/questions/57720294
复制相似问题