Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala并行集合不一致_Scala_Parallel Processing - Fatal编程技术网

scala并行集合不一致

scala并行集合不一致,scala,parallel-processing,Scala,Parallel Processing,我从下面的代码中得到了不一致的答案,我觉得很奇怪 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),

我从下面的代码中得到了不一致的答案,我觉得很奇怪

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
导入scala.math.pow
val p=2
val a=数组(1,2,3)
印刷品(A.PAR)
.合计(“0”)((x,y)=>s“$y pow$p;”,(x,y)=>x+y))
对于(i功率(y,p),(x,y)=>x+y)==14)
}
a、 map(x=>pow(x,p)).sum
<代码>代码> A.Par…< /代码>计算<代码> 14 <代码> <强>或< /强>代码> 10 < /代码>。有人能解释为什么计算不一致吗?

在“seqop”函数中,这是您传递给聚合的第一个函数,您定义了用于在同一分区内组合元素的逻辑。您的函数如下所示:

(x, y) => pow(y, p)
问题是您没有累积分区的结果。相反,您将丢弃累加器
x
。每次你得到10作为结果,计算
2^2
被删除

如果将函数更改为将累计值考虑在内,则每次将得到14:

(x, y) => x + pow(y, p)

使用聚合的正确方法是

    a.par.aggregate(0.0)(
        (acc, value) => acc + pow(value, 2), (acc1, acc2) => acc1 + acc2
    )
通过使用(x,y)=>pow(y,2),您没有将项目累加到累加器中,而是将累加器替换为pow(y,2)