Vas*_*sco 0 parallel-processing scala
我从下面的代码得到了不一致的答案,我觉得很奇怪.
import scala.math.pow
val p = 2
val a = Array(1,2,3)
println(a.par
.aggregate("0")((x, y) => s"$y pow $p; ", (x, y) => x + y))
for (i <- 1 to 100) {
println(a.par
.aggregate(0.0)((x, y) => pow(y, p), (x, y) => x + y) == 14)
}
a.map(x => pow(x,p)).sum
Run Code Online (Sandbox Code Playgroud)
在代码中a.par ...计算14 或 10.任何人都可以解释为什么计算不一致吗?
在您的"seqop"函数中,这是您传递给的第一个函数aggregate,您可以定义用于组合同一分区中的元素的逻辑.你的功能如下:
(x, y) => pow(y, p)
Run Code Online (Sandbox Code Playgroud)
问题是您不会累积分区的结果.相反,你扔掉你的累加器x.每次结果都是10,计算结果就会2^2被删除.
如果您更改功能以将累计值考虑在内,您每次都会得到14:
(x, y) => x + pow(y, p)
Run Code Online (Sandbox Code Playgroud)