案例类的瞬态字段在Spark rdd中为空

问题描述 投票:-1回答:1

我有一个案例类,它接受Java类LinkedSparseMatrix(软件包-no.uib.cipr.matrix.sparse)的实例为-

case class A(mat: LinkedSparseMatrix)

[当我尝试将List[LinkedSparseMatrix]转换为Spark RDD时,它将抛出TaskNotSerializableException。因此,我将该字段声明为瞬态。但是随后所有的mat字段都变为null,我认为这是由于定义为瞬态的对象的默认值引起的。

所以,我试图将变量定义为lazy,因此将类更改为-

class A (m: LinkedSparseMatrix) extends Serializable {
    @transient lazy val mat = m
    // some other code
}

但是现在,我仍然得到-java.io.NotSerializableException: no.uib.cipr.matrix.sparse.LinkedSparseMatrix-我不明白为什么!

对此有什么解决方案吗?预先感谢。

java scala apache-spark rdd
1个回答
1
投票

您可以启用Kryo序列化,而不是默认的Java序列化。 Kryo可以序列化对象而无需实现java.io.Serializable

© www.soinside.com 2019 - 2024. All rights reserved.