分配的变量未传递给Spark中的map函数

时间:2015-06-04 15:38:36

标签: scala apache-spark

我使用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

这适用于两种情况。

我只需要了解每种情况下的原因。提前感谢任何建议。

1 个答案:

答案 0 :(得分:2)

我认为这与使用App有关。仅SPARK-4170

warns against using App进行了“解决”
if (classOf[scala.App].isAssignableFrom(mainClass)) {
   printWarning("Subclasses of scala.App may not work correctly. Use a main() method instead.")
}

票证说明:

  

这个错误似乎是Scala定义方式的问题,以及运行时与编译时间相关的方式与App利用delayedInit函数的方式之间的差异。