java - combinebykey 和 aggregatebykey 的区别

标签 java apache-spark

我是 Apache spark 的新手,所以这个问题可能不好问,但我不知道 combinebykeyaggregatebykey 之间的区别以及何时使用哪个操作。

最佳答案

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/

相关文章:

apache-spark - 我应该合并火​​花输出文件吗?

python - 在 Spark 中将简单的单行字符串转换为 RDD

scala - Spark Job通过运行相同的映射3次而不断失败

java - 为什么 import.sql 在 Spring Boot 中会失败?

Java URL 挂起并且无法在网站中读取

java - 如何在 JEdit 中编译和运行 java 代码?

sql-server - 将数据从 MS SQL 表加载到 snappyData

java - Spark flatMap/减少 : How to scale and avoid OutOfMemory?

java - 关于如何计算验证 "if"条件的元素数量的任何想法?

java - 确定哪一行打印了堆栈跟踪?