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,但这个答案效果很好。谢谢