这三个Apache Spark转换很容易混淆。有什么方法可以确定何时使用哪一个以及何时避免使用哪一个?
答案 0 :(得分:5)
我认为official guide解释得很好。
我将突出显示差异(您有类型(K, V)
的RDD):
groupByKey
K
),你有两个选项:reduceByKey
或aggregateByKey
(reduceByKey
有点特别aggregateByKey
)
(V, V)
的操作并返回V
,那么该组的所有值都可以减少到一个相同类型的值,然后使用reduceByKey
。因此,您将拥有相同(K, V)
类型的RDD。aggregateByKey
。将值减少到另一个类型时会发生这种情况。因此,您将获得(K, V2)
。答案 1 :(得分:1)
除了@Hlib回答之外,我还想补充几点。
groupByKey()
只是根据密钥对数据集进行分组。reduceByKey()
类似于 分组+聚合 。我们可以说reduceBykey()等于dataset.group(...).reduce(...)
。aggregateByKey()
在逻辑上与reduceByKey()相同,但它允许您以不同的类型返回结果。换句话说,它允许您输入类型x 并将结果汇总为类型y 。例如(1,2),(1,4)作为输入,(1,"六")作为输出。