訪問變量中,我有以下RDD:斯卡拉 - 不能爲環
1:AAAAABAAAAABAAAAABAAAAAB
2:BBAAAAAAAAAABBAAAAAAAAAA
中的每個字符是一個事件。 Mi期望的輸出是獲得每組事件的發生次數。對於這第一個例子中,輸出應該是:
{ "A" -> 6 , "B" -> 6 }
我的代碼,我得到所需的輸出:
val rdd = sqlContext.sparkContext.makeRDD(Seq(
"1:AAAAABAAAAABAAAAABAAAAAB","2:BBAAAAAAAAAABBAAAAAAAAAA"))
val rddSplited = rdd.map(_.split(":")(1).toList)
val values = scala.collection.mutable.Map[String, Long]()
var iteracion = 0
for (ocurrences <- rddSplited) {
var previousVal = "0"
for (listValues <- ocurrences) {
if (listValues.toString != previousVal) {
values.get(listValues.toString) match {
case Some(e) => values.update(listValues.toString, e + 1)
case None => values.put(listValues.toString, 1)
}
previousVal = listValues.toString()
}
}
//println(values) //return the values
}
println(values) //returns an empty Map
}
的問題是,
的println(值)
不返回任何數據,但如果在註釋println被放置時更改它,則地圖值確實會返回值。
如何在main for循環之後返回映射的最終值?
對不起,如果我的實現不是最好的,我是新的Scala/Spark世界。
在此先感謝。
我在編輯問題以更好地解釋我想實現的目標, 提供答案的代碼(感謝您的所有幫助)並未返回所需的輸出。我並不想對事件進行計數的數字,我需要的是計數的出現次數,當一個事件改變到另一個,即:
AAAAABAAAAABAAAAABAAAAAB => A-> 4 , B-> 4
BBAAAAAAAAAABBAAAAAAAAAA => A-> 2 , B-> 2
So the final output should be A-> 6 , B-> 6
我的誤解真的很抱歉。
即使在一個不會被推薦(如突變/副作用)的JVM Scala代碼中,所以使用Spark ... – cchantep