斯卡拉 - 保持地图在foreach

时间:2016-11-09 10:30:12

标签: scala dictionary

    var myMap:Map[String, Int] = Map()
    myRDD.foreach { data =>
        println( "1. " + data.name + " : " + data.time)
        myMap += ( data.name -> data.time)
        println( "2. " + myMap)
    }
    println( "Total Map : " + myMap)

结果

  
      
  1. A:1
  2.   
  3. 地图(A - > 1)
  4.   
  5. B:2
  6.   
  7. 地图(B - > 2)//已删除密钥A
  8.   
  9. C:3
  10.   
  11. 地图(C - > 3)//删除了密钥A和B
  12.         

    总地图:地图()//没有

不知何故,我无法将地图数据存储在foreach中。它在添加新密钥和值时不断删除或初始化先前的数据。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Spark闭包被序列化并在单独的上下文中执行(在群集中时远程执行)。 myMap变量不会在本地更新。

要将RDD中的数据作为地图获取,可以进行内置操作:

val myMap = rdd.collectAsMap()