Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 序列化带有或不带有@transient的惰性val时的差异_Scala_Serialization_Apache Spark_Lazy Initialization_Transient - Fatal编程技术网

Scala 序列化带有或不带有@transient的惰性val时的差异

Scala 序列化带有或不带有@transient的惰性val时的差异,scala,serialization,apache-spark,lazy-initialization,transient,Scala,Serialization,Apache Spark,Lazy Initialization,Transient,使用spark时,有时我需要在每个任务中发送一个不可序列化的对象 一种常见的模式是@transient lazy val,例如 class A(val a: Int) def compute(rdd: RDD[Int]) = { // lazy val instance = { @transient lazy val instance = { println("in lazy object") new A(1) } val res = rdd.map(insta

使用spark时,有时我需要在每个任务中发送一个不可序列化的对象

一种常见的模式是
@transient lazy val
,例如

class A(val a: Int)

def compute(rdd: RDD[Int]) = {
  // lazy val instance = {
  @transient lazy val instance = {
    println("in lazy object")
    new A(1)
  }
  val res = rdd.map(instance.a + _).count()
  println(res)
}

compute(sc.makeRDD(1 to 100, 8))
我发现这里不需要
@transient
<代码>惰性val已经可以在执行每个任务时创建不可序列化的。但是人们建议使用
@transient

  • 如果我们在序列化非初始化的
    惰性val
    时,将其设置为
    @transient
    ,有什么好处

  • 在知道不会序列化任何内容的情况下,让未初始化的
    val
    暂时用于序列化是否有意义,就像上面的示例一样

  • 如何序列化
    @transient lazy val
    ?它是作为一种方法还是其他什么

  • 有关序列化
    @transient lazy val
    和编译的java字节码的一些详细信息非常棒。

    请参见此处-

    在Scala中,lazy val表示一个字段,该字段只有在第一次访问时才会进行计算,然后存储以供将来参考。另一方面,使用@transient可以表示不应序列化的字段