我是 Apache spark 的新手,所以这个问题可能不好问,但我不知道 combinebykey
和 aggregatebykey
之间的区别以及何时使用哪个操作。
最佳答案
aggregateByKey
采用初始累加器,第一个 lambda 函数将值合并到累加器,第二个 lambda 函数合并两个累加器。
combineByKey
更通用,并添加了一个初始 lambda 函数来创建初始累加器
举个例子:
val pairs = sc.parallelize(List(("prova", 1), ("ciao", 2),
("prova", 2), ("ciao", 4),
("prova", 3), ("ciao", 6)))
pairs.aggregateByKey(List[Any]())(
(aggr, value) => aggr ::: (value :: Nil),
(aggr1, aggr2) => aggr1 ::: aggr2
).collect().toMap
pairs.combineByKey(
(value) => List(value),
(aggr: List[Any], value) => aggr ::: (value :: Nil),
(aggr1: List[Any], aggr2: List[Any]) => aggr1 ::: aggr2
).collect().toMap
关于java - combinebykey 和 aggregatebykey 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43489527/