我知道在RDD中我们不鼓励使用groupByKey,并鼓励使用reduceByKey()和aggregateByKey()之类的替代方法,因为这些其他方法会首先减少每个分区,然后执行groupByKey( )因此减少了被洗牌的数据量。
现在,我的问题是,这仍然适用于数据集/数据帧吗?我在想,既然催化剂引擎做了很多优化,催化剂会自动知道它应该减少每个分区,然后执行groupBy。我对么?或者我们仍然需要采取措施确保在groupBy之前执行每个分区的减少。
答案 0 :(得分:4)
groupBy
应在Dataframes和Datasets中使用。您认为完全正确,Catalyst Optimizer将构建计划并优化GroupBy中的所有入口以及您想要执行的其他聚合。
有一个很好的例子,就是在这个link的spark 1.4中,它显示了reduceByKey与RDD和GroupBy与DataFrame的比较。
你可以看到它比RDD快得多,所以groupBy优化所有执行以获得更多细节,你可以看到DataBricks的官方帖子introduction of DataFrames