2017-03-01 48 views
0

在Scala中,我试图通过一个巨大的全局变量到地图操作,火花提示我的信息:如何在地图操作中添加全局变量?

ERROR yarn.ApplicationMaster: User class threw exception: java.lang.StackOverflowError 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 

代码如下:

val data = sc.textFile(inputPath).cache() 
val map = Map[String, Int]() 
for (i <- 0 to 9) { 
    map(i.toString) = i 
} 
data.map(sample => { 
    if (map.contains(sample)) { 
     ("Found") 
    } 
    else { 
     ("Not found") 
    } 
}) 
+0

我认为你需要广播地图。 尝试val broadcastcastedMap = sc.broadcast(地图) 并访问它with broadcastcastedMap.value –

+0

尝试过,仍然遇到同样的错误... –

+0

为什么你序列化*巨大的*对象? –

回答

0

它已经解决了,我调整数据类型从“Array [Map [String,Int]]”到“Map [String,Int]”

相关问题