【问题标题】:Should I Avoid groupby() in Dataset/Dataframe? [duplicate]我应该避免在数据集/数据框中使用 groupby() 吗? [复制]
【发布时间】:2018-06-04 14:49:39
【问题描述】:
我知道在 RDD 中我们不鼓励使用 groupByKey,并鼓励使用 reduceByKey() 和 aggregateByKey() 等替代方法,因为这些其他方法会首先在每个分区上减少,然后执行 groupByKey(),从而减少被洗牌的数据量。
现在,我的问题是这是否仍然适用于数据集/数据框?我在想,由于催化剂引擎做了很多优化,催化剂会自动知道它应该在每个分区上减少,然后执行 groupBy。我对么?或者我们仍然需要采取措施确保在 groupBy 之前对每个分区执行归约。
【问题讨论】:
标签:
apache-spark
optimization
group-by
dataset
spark-dataframe
【解决方案1】:
groupBy 应该用于数据帧和数据集。您的想法是完全正确的,Catalyst Optimizer 将构建计划并优化 GroupBy 和其他您想做的聚合中的所有入口。
有一个很好的例子,那就是在这个link 的 spark 1.4 中,它显示了 reduceByKey 与 RDD 和 GroupBy 与 DataFrame 的比较。
您可以看到它确实比 RDD 快得多,因此 groupBy 优化所有执行以获取更多详细信息,您可以查看 DataBricks 的官方帖子introduction of DataFrames