我有定義,就像這樣的Scala類:斯卡拉成員領域的知名度
import org.apache.spark.{SparkConf, SparkContext}
object TestObject extends App{
val FAMILY = "data".toUpperCase
override def main(args: Array[String]) {
val sc = new SparkContext(new SparkConf())
sc.parallelize(1 to 10)
.map(getData)
.saveAsTextFile("my_output")
}
def getData(i: Int) = {
(i, FAMILY, "data".toUpperCase)
}
}
我提交給紗線集羣,像這樣:
HADOOP_CONF_DIR=/etc/hadoop/conf spark-submit \
--conf spark.hadoop.validateOutputSpecs=false \
--conf spark.yarn.jar=hdfs:/apps/local/spark-assembly-1.2.1-hadoop2.4.0.jar \
--deploy-mode=cluster \
--master=yarn \
--class=TestObject \
target/scala-2.11/myjar-assembly-1.1.jar
不料,輸出看起來像下面,說明該方法getData
不能看到的FAMILY
值:
(1,null,DATA)
(2,null,DATA)
(3,null,DATA)
(4,null,DATA)
(5,null,DATA)
(6,null,DATA)
(7,null,DATA)
(8,null,DATA)
(9,null,DATA)
(10,null,DATA)
我需要了解什麼,領域和範圍,可見性和火花提交以及對象和單身和什麼,以瞭解爲什麼發生這種情況?如果我基本上希望將變量定義爲「常量」,那麼我應該怎麼做?getData
方法?
這是一個序列化的問題,它看起來像你正在使用KRYO序列化。你是否提供了正確的班級註冊?你有沒有嘗試刪除'spark.serializer = org.apache.spark.serializer.KryoSerializer'行? – maasg 2015-03-18 23:09:03
如果我不在RDD中使用自定義類型,是否需要任何Kryo註冊? – 2015-03-19 14:16:31
我已經從作業提交中刪除了Kryo行,同樣的問題仍然存在。 – 2015-03-23 18:37:13