Apache Spark Transformations:groupByKey vs reduceByKey vs aggregateByKey

Chi*_*iya 2 apache-spark rdd

这三个Apache Spark转换很容易混淆.有什么方法可以确定何时使用哪一个以及何时避免使用哪一个?

Hli*_*lib 6

我认为官方指南解释得很好.

我将突出显示差异(你有类型的RDD (K, V)):

  1. 如果您需要保留这些值,请使用groupByKey
  2. 如果你不需要保留这些值,但是你需要得到关于每个组的一些汇总信息(原始RDD的项目,它们都相同K),你有两个选择:reduceByKey或者aggregateByKey(reduceByKey有点特别aggregateByKey)
    • 2.1如果你提供一个作为输入(V, V)并返回的操作V,那么组的所有值都可以减少到相同类型的单个值,然后使用reduceByKey.因此,您将拥有相同(K, V)类型的RDD .
    • 2.2如果无法提供此聚合操作,则使用aggregateByKey.将值减少到另一种类型时会发生这种情况.所以你会得到(K, V2)结果.