相关疑难解决方法(0)

任务不可序列化:java.io.NotSerializableException仅在类而不是对象上调用闭包外的函数时

在闭包之外调用函数时会出现奇怪的行为:

  • 当函数在一个对象中时,一切正常
  • 当函数在类中时获取:

任务不可序列化:java.io.NotSerializableException:testing

问题是我需要在类中的代码而不是对象.知道为什么会这样吗?Scala对象是否已序列化(默认?)?

这是一个有效的代码示例:

object working extends App {
    val list = List(1,2,3)

    val rddList = Spark.ctx.parallelize(list)
    //calling function outside closure 
    val after = rddList.map(someFunc(_))

    def someFunc(a:Int)  = a+1

    after.collect().map(println(_))
}
Run Code Online (Sandbox Code Playgroud)

这是一个非工作的例子:

object NOTworking extends App {
  new testing().doIT
}

//adding extends Serializable wont help
class testing {  
  val list = List(1,2,3)  
  val rddList = Spark.ctx.parallelize(list)

  def doIT =  {
    //again calling the fucntion someFunc 
    val after = rddList.map(someFunc(_))
    //this will crash (spark lazy)
    after.collect().map(println(_))
  }

  def someFunc(a:Int) …
Run Code Online (Sandbox Code Playgroud)

serialization scala typesafe apache-spark

211
推荐指数
6
解决办法
15万
查看次数

标签 统计

apache-spark ×1

scala ×1

serialization ×1

typesafe ×1