Scala Spark中的NotSerializableException

Scala Spark中的NotSerializableException,scala,apache-spark,rdd,serializable,Scala,Apache Spark,Rdd,Serializable,大多数在线非序列化问题都会获得非常基本的数据作为其sc.parallelize()的输入,在映射部分,他们会遇到非序列化问题,但我的是一种类型。我有一个特定的数据类型,它来自第三方库,不可序列化。 所以写这篇文章显示了NotSerializableException: val data: RDD[ThirdPartyLib.models.XData] = sc.parallelize(ThirdPartyLib.getX) data.foreachPartition(rows => {

大多数在线非序列化问题都会获得非常基本的数据作为其
sc.parallelize()
的输入,在映射部分,他们会遇到非序列化问题,但我的是一种类型。我有一个特定的数据类型,它来自第三方库,不可序列化。 所以写这篇文章显示了NotSerializableException:

val data: RDD[ThirdPartyLib.models.XData] = sc.parallelize(ThirdPartyLib.getX)

data.foreachPartition(rows => {
  rows.foreach(row => {
    println("value: " + row.getValue)    
  })  
})
作为解决方案,我在内部创建了相同的模型类(扩展数据),但使其可序列化,并执行了以下操作:

val data: RDD[XData] = (sc.parallelize(ThirdPartyLib.getX)).asInstanceOf[RDD[XData]]

data.foreachPartition(rows => {
  rows.foreach(row => {
    println("value: " + row.getValue)    
  })  
})
我希望问题能够得到解决,但我仍然遇到了与
[error]org.apache.spark.util.Utils logError-Exception遇到的错误相同的错误
java.io.NotSerializableException:ThirdPartyLib.models.XData
。当我创建内部可序列化类型时,问题不应该重新解决吗?我怎样才能解决这个问题呢?

那么

(sc.parallelize(ThirdPartyLib.getX)).asInstanceOf[RDD[XData]]
首先并行化,然后强制转换。因此,spark仍然需要第三方ylib.models.XData才能序列化。此外,该类型转换可能会爆炸,因为类型不同

我认为这应该能奏效

def convertThirdPartyXDataToMyXData( xd: ThirdPartyLib.models.XData): XData = ???

val data: RDD[ThirdPartyLib.models.XData] = sc.parallelize(ThirdPartyLib.getX.map(convertThirdPartyXDataToMyXData)) //if you have a map on the collection that getX returns
所以

(sc.parallelize(ThirdPartyLib.getX)).asInstanceOf[RDD[XData]]
首先并行化,然后强制转换。因此,spark仍然需要第三方ylib.models.XData才能序列化。此外,该类型转换可能会爆炸,因为类型不同

我认为这应该能奏效

def convertThirdPartyXDataToMyXData( xd: ThirdPartyLib.models.XData): XData = ???

val data: RDD[ThirdPartyLib.models.XData] = sc.parallelize(ThirdPartyLib.getX.map(convertThirdPartyXDataToMyXData)) //if you have a map on the collection that getX returns

什么是扩展数据?你能分享它的内容吗?我不知道我能不能分享它的内容。但是它只是一个具有属性和简单getter/setter的简单pojo类。
ThirdPartyLib.getX
是否返回
XData
对象列表?是的
ThirdPartyLib.getX
返回
XData
的列表。这里的
XData
是什么?你能分享它的内容吗?我不知道我能不能分享它的内容。但是它只是一个具有属性和简单getter/setter的简单pojo类。
ThirdPartyLib.getX
是否返回
XData
对象列表?是的
ThirdPartyLib.getX
返回
XData
的列表。我最后要求第三方库所有者将类更改为可序列化,但这个答案效果很好。ThanksI最终要求第三方库所有者将类更改为Serializable,但这个答案效果很好。谢谢