繁体   English   中英

Apache Spark:手动计数给出了与 count() 不同的结果 function

[英]Apache Spark: Manual counting gives different results from count() function

有人可以告诉我为什么在这两种情况下我看不到完全相同的计数:

val count = myRdd.count()
println("Count from count() function: " + count)

var counters: Map[String, Int] = Map()
myRdd.foreach(i => {
  counters = counters.updated(i, counters.getOrElse(i, 0) + 1)
})

counters.foreach(i => {
  println("My key: " + i._1 + " Count: " + i._2)
})

只是想了解'map.updated' function。

另外,如果我将“计数器”更改为:

var counters: Map[String, Long] = Map()

我得到编译器错误:

Error:(58, 65) type mismatch;
 found   : Long(1L)
 required: String
      counters = counters.updated(i, counters.getOrElse(i, 0) + 1L)

为什么我会收到此编译器错误? 为什么说“字符串”是必需的?

您不能在工作人员之间共享可变变量(var 计数器)。 您将以并发问题结束。

我建议参考基本字数练习作为起点

像这样的东西

myrdd.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)

这将给出您的 map function 的中间结果,这是您的预期结果吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM