我在本地模式下运行Spark shell(1.2.1),我有一个简单的RDD[(String,String,Double)]
,其中包含大约10,000个对象。
每当我尝试运行以下代码时,我得到StackOverFlowError
(代码本身只是我需要传递变量的其他逻辑的代表)。我也尝试播放变量,但没有运气..在这里缺少一些基本的东西 -
val a=10
rdd.map(r => if (a==10) 1 else 0)
抛出
java.lang.StackOverflowError
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:318)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1133)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
...
...
感谢帮助!
编辑 - 尝试使用1.4.1但它没有用。更愚蠢 -
这有效 -
val lst = Range(0,10000).map(i=>("10","10",i:Double)).toList
sc.makeRDD(lst).map(i=> if(a==10) 1 else 0)
但是这并没有引发StackoverflowError -
val lst = MutableList[(String,String,Double)]()
Range(0,10000).foreach(i=>lst+=(("10","10",i:Double)))
sc.makeRDD(l).map(i=> if(a==10) 1 else 0)