我知道在 RDD 中,我们不鼓励使用 groupByKey,并鼓励使用替代方案,例如 reduceByKey() 和aggregateByKey(),因为这些其他方法将首先在每个分区上减少,然后执行 groupByKey() 从而减少被打乱的数据量。
现在,我的问题是这是否仍然适用于数据集/数据框?我在想,由于催化剂引擎做了很多优化,催化剂会自动知道它应该在每个分区上减少,然后执行groupBy。我对么?或者我们仍然需要采取措施确保每个分区的归约在 groupBy 之前执行。
请您参考如下方法:
groupBy 应该用于数据帧和数据集。您的想法完全正确,Catalyst 优化器将构建计划并优化 GroupBy 中的所有入口以及您想要执行的其他聚合。
有一个很好的例子,就是在spark 1.4中这个link显示了reduceByKey与RDD以及GroupBy与DataFrame的比较。
你可以看到它确实比 RDD 快得多,因此 groupBy 优化了所有执行,有关更多详细信息,你可以查看 DataBricks 的官方帖子 introduction of DataFrames

