我知道,在RDD中,我们不鼓励使用GroupByKey,并鼓励使用selectbykey()和gengregatebykey()等替代方案,因为这些其他方法会在每个分区上首先减少,并且然后执行GroupByKey(),从而减少被改组的数据量。
现在,我的问题是,这是否仍然适用于数据集/dataFrame?我当时认为,由于Catalyst Engine进行了很多优化,因此催化剂会自动知道它应该减少每个分区,然后执行组比。我对么?否则我们仍然需要采取步骤以确保在Groupby之前执行每个分区的减少。
应在数据范围和数据集中使用groupBy
。您认为是完全正确的,催化剂优化器将构建计划并优化Groupby和您想做的其他聚合中的所有入口。
有一个很好的例子,在此链接上是Spark 1.4,显示了ReddByKey与RDD和GroupBy与DataFrame的比较。
您可以看到,这确实比RDD要快得多,因此GroupBy优化了所有执行信息,以获取更多详细信息,您可以通过引入DataFrames