Spark Shell - 将变量传递给闭包

时间:2015-08-28 16:48:59

标签: scala apache-spark rdd

我在本地模式下运行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)

0 个答案:

没有答案
相关问题