我使用Spark 1.3.1和Scala 2.10.4。我已经尝试了一个基本场景,它包括并行化3个字符串的数组,并使用我在驱动程序中定义的变量映射它们。
以下是代码:
<div>
<span>span 1</span>
<h3>text</h3>
<span>span 2</span>
</div>
这段代码在本地模式下工作,我得到一个列表:
object BasicTest extends App {
val conf = new SparkConf().setAppName("Simple Application").setMaster("spark://xxxxx:7077")
val sc = new SparkContext(conf)
val test = sc.parallelize(Array("a", "b", "c"))
val a = 5
test.map(row => row + a).saveAsTextFile("output/basictest/")
}
但是在一个真正的集群上,我得到了:
a5
b5
c5
我尝试过其他代码:
a0
b0
c0
这适用于两种情况。
我只需要了解每种情况下的原因。提前感谢任何建议。
答案 0 :(得分:2)
我认为这与使用App
有关。仅SPARK-4170
App
进行了“解决”
if (classOf[scala.App].isAssignableFrom(mainClass)) {
printWarning("Subclasses of scala.App may not work correctly. Use a main() method instead.")
}
票证说明:
这个错误似乎是Scala定义方式的问题,以及运行时与编译时间相关的方式与App利用delayedInit函数的方式之间的差异。