Eda*_*ame 2 scala hashmap apache-spark rdd
我有以下代码,其中rddMap是org.apache.spark.rdd.RDD[(String, (String, String))],myHashMap是scala.collection.mutable.HashMap.
我做.saveAsTextFile("temp_out")了强制评估rddMap.map.
然而,即使println(" t " + t)是打印东西,后来myHashMap仍然只有一个我手动放在一开始的元素("test1", ("10", "20")).其中的一切都rddMap没有投入myHashMap.
代码段:
val myHashMap = new HashMap[String, (String, String)]
myHashMap.put("test1", ("10", "20"))
rddMap.map { t =>
println(" t " + t)
myHashMap.put(t._1, t._2)
}.saveAsTextFile("temp_out")
println(rddMap.count)
println(myHashMap.toString)
Run Code Online (Sandbox Code Playgroud)
为什么我不能把rddMap中的元素放到我的myHashMap?
以下是您要完成的工作示例.
val rddMap = sc.parallelize(Map("A" -> ("v", "v"), "B" -> ("d","d")).toSeq)
// Collects all the data in the RDD and converts the data to a Map
val myMap = rddMap.collect().toMap
myMap.foreach(println)
Run Code Online (Sandbox Code Playgroud)
输出:
(A,(v,v))
(B,(d,d))
Run Code Online (Sandbox Code Playgroud)
以下是与您发布的内容类似的代码
rddMap.map { t=>
println("t" + t)
newHashMap.put(t._1, t._2)
println(newHashMap.toString)
}.collect
Run Code Online (Sandbox Code Playgroud)
以下是Spark shell中上述代码的输出
t(A,(v,v))
Map(A -> (v,v), test1 -> (10,20))
t(B,(d,d))
Map(test1 -> (10,20), B -> (d,d))
Run Code Online (Sandbox Code Playgroud)
对我来说,看起来Spark会复制你的HashMap并将元素添加到复制的地图中.
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |