我有一个案例类,它接受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
-我不明白为什么!
对此有什么解决方案吗?预先感谢。
您可以启用Kryo序列化,而不是默认的Java序列化。 Kryo可以序列化对象而无需实现java.io.Serializable
。