我有类似的问题。看完帖后, Scala: mutable HashMap does not update inside for loop 我将代码更改为在添加到HashMap时使用update()
val tempLHM = new HashMap[String, String] //[edge, vertex]
pit.foreach { x =>
val pp = x.getList(0).iterator()
while(pp.hasNext()){
val pitcol = pp.next().toString().split("\\s+")
tempLHM.update(pitcol.apply(0).toString(), pitcol.apply(2).toString())
}
}
//level0 ppin mapped as edge->vertex println(tempLHM.size)} }
println(tempLHM.size)
请注意,while循环中的第一个print stmt会正确打印大小,但最后一行的stmt会打印0。
这是foreach函数的行为吗? 谢谢!
UPDATE1:我已导入以下内容以使用mutable hashmap
import collection.mutable._
UPDATE2:坑是以下列方式派生的
val level0Table = hiveContext.read.json(hierarchyMap.get("toplevel").get._2)
level0Table.registerTempTable("level0"+ hierarchyMap.get("toplevel").get._2)
val pit = level0Table.select("PIT")
答案 0 :(得分:0)
您的问题不提供示例数据或显示您使用的导入。但是,错误必须在输入数据或用于解析它的方法中。以下是使用可变映射的示例:
object MutableTest extends App {
val data = List(("a", 1),
("b", 2),
("c", 3),
("a", 0))
val mutableMap = new scala.collection.mutable.HashMap[String, Int]
data foreach {tup =>
mutableMap.update(tup._1, tup._2)
}
println(mutableMap)
}//end object MutableTest
结果如预期:
地图(b - > 2,a - > 0,c - > 3)
我建议您输出pit
中的元素数量,输出每个pp
中的元素数量,然后输出pitcol
。