![](/img/trans.png)
[英]Results of rdd.count, count via spark sql are the same, but they are different from count with hive sql
[英]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.