相关疑难解决方法(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万
查看次数

使用json4s解析JSON时Spark不可序列化的异常

我试图在我的火花工作中解析json时遇到了一个问题.我使用spark 1.1.0,json4sCassandra Spark Connector.抛出的异常是:

java.io.NotSerializableException: org.json4s.DefaultFormats

检查DefaultFormats伴随对象,并且使用此堆栈问题,很明显无法序列化DefaultFormats.问题是现在该做什么.

通过添加关键字transient,我可以看到这张显然在spark代码库中解决了这个问题,但我不确定如何或在何处将它应用到我的案例中.解决方案是仅在执行程序上实例化DefaultFormats类,以避免序列化在一起吗?是否有人们正在使用scala/spark的另一个JSON解析库?我最初尝试使用jackson本身,但遇到了一些我无法轻易解决的注释错误,json4s开箱即用.这是我的代码:

import org.json4s._
import org.json4s.jackson.JsonMethods._
implicit val formats = DefaultFormats

val count = rdd.map(r => checkUa(r._2, r._1)).reduce((x, y) => x + y) 
Run Code Online (Sandbox Code Playgroud)

我在checkUa函数中进行json解析.我试图让计数懒惰,希望它以某种方式延迟执行,但它没有效果.也许在checkUA中移动隐式val?任何建议都非常感谢.

serialization scala json4s apache-spark

11
推荐指数
1
解决办法
5157
查看次数

标签 统计

apache-spark ×2

scala ×2

serialization ×2

json4s ×1

typesafe ×1