任务不可序列化:仅由于固定的字符串?

时间:2015-04-10 10:41:44

标签: scala apache-spark

我有以下RDD:

myRDD:org.apache.spark.rdd.RDD[(String, org.apache.spark.mllib.linalg.Vector)]

然后我想添加一个固定密钥:

myRdd.map(("myFixedKey",_)):org.apache.spark.rdd.RDD[(String, (String, org.apache.spark.mllib.linalg.Vector))]

但是如果我使用常量String val而不是硬编码/显式字符串:

val myFixedKeyVal:String = "myFixedKey" myRdd.map((myFixedKeyVal,_))

此前一行代码提供以下异常:

org.apache.spark.SparkException: Task not serializable

我错过了什么吗?

解决方案:

好的我发现了问题,myRdd是一个扩展Serializable类的对象,但在由另一个类处理这个RDD之后,例如Process

class Process(someRdd:MyRddClass) extends Serializable{
   def preprocess = someRdd.map(_)
}
val someprocess = Process(myRdd)
val newRdd = someprocess.preprocess
newRdd.map(x=>("newkey",x)

此课程Process也必须延长Serializable才能发挥作用。我认为newRdd正在扩展根类MyRddClass ...

1 个答案:

答案 0 :(得分:1)

字符串常量不是问题。使用-Dsun.io.serialization.extendedDebugInfo=true打开序列化调试以找出真正的原因。