谁能解释一下 reducebykey、groupbykey、aggregatebykey 和 combinebykey 之间的区别?我读过相关文件,但不明白它们之间的具体区别。
如果您能举例说明,那就太好了。
虽然 reducebykey 和 groupbykey 都会产生相同的答案,但 reduceByKey 示例在大型数据集上的效果更好。 reduceByKey 示例在大型数据集上效果更好。这是因为 因为 Spark 知道它可以在每个
因为 Spark 知道它可以在洗牌数据之前,将每个分区上的输出与公共键结合起来。 >; >; 另一方面,当调用 groupByKey 时--所有键值对 都会被洗牌。这将导致大量不必要的数据 通过网络传输。
更多详细信息,请查看下面的链接
https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/best_practices/prefer_reducebykey_over_groupbykey.html
类似于分组 + 聚合。我们可以说 reduceBykey() 相当于 dataset.group(...).reduce(...)。与
注意 : 相同之处在于它们都是宽运算。
ReduceByKey reduceByKey(func, [numTasks])-
reduceByKey(func, [numTasks])
合并数据,使每个分区的每个键都至少有一个值。 然后进行洗牌,并通过网络发送到某个特定的执行器,以执行某些操作,如 reduce。
GroupByKey- groupByKey([numTasks])
groupByKey([numTasks])
它不会合并键值,而是直接进行洗牌处理 在这里,大量数据会被发送到每个分区,几乎与初始数据相同。
每个键值的合并是在洗牌后进行的。 在这里,大量数据存储在最终工作节点上,因此导致内存不足问题。
AggregateByKey - aggregateByKey(zeroValue)(seqOp, combOp, [numTasks]) 它与 reduceByKey 类似,但可以在执行聚合时提供初始值。
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])
使用 `reduceByKey
当我们在大型数据集上运行时,可以使用 reduceByKey。
reduceByKey
当输入和输出值类型相同时,使用 reduceByKey 超过aggregateByKey` 时
reduceByKey 超过
此外,建议不要使用 groupByKey 而使用 reduceByKey。详细信息请参阅 此处。
groupByKey
您还可以参考 问题 以更详细地了解 reduceByKey 和 aggregateByKey 的用法。
aggregateByKey
虽然 reducebykey 和 groupbykey 都会产生相同的答案,但 reduceByKey 示例在大型数据集上的效果更好。 reduceByKey 示例在大型数据集上效果更好。这是因为 因为 Spark 知道它可以在每个
更多详细信息,请查看下面的链接
https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/best_practices/prefer_reducebykey_over_groupbykey.html
类似于分组 + 聚合。我们可以说 reduceBykey() 相当于 dataset.group(...).reduce(...)。与
groupByKey()` 不同的是,它会减少数据的洗牌。注意 : 相同之处在于它们都是宽运算。
ReduceByKey
reduceByKey(func, [numTasks])
-合并数据,使每个分区的每个键都至少有一个值。 然后进行洗牌,并通过网络发送到某个特定的执行器,以执行某些操作,如 reduce。
GroupByKey-
groupByKey([numTasks])
它不会合并键值,而是直接进行洗牌处理 在这里,大量数据会被发送到每个分区,几乎与初始数据相同。
每个键值的合并是在洗牌后进行的。 在这里,大量数据存储在最终工作节点上,因此导致内存不足问题。
AggregateByKey -
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])
它与 reduceByKey 类似,但可以在执行聚合时提供初始值。使用 `reduceByKey
当我们在大型数据集上运行时,可以使用
reduceByKey
。当输入和输出值类型相同时,使用
reduceByKey 超过
aggregateByKey` 时此外,建议不要使用
groupByKey
而使用reduceByKey
。详细信息请参阅 此处。您还可以参考 问题 以更详细地了解
reduceByKey
和aggregateByKey
的用法。