【发布时间】:2018-08-27 23:17:53
【问题描述】:
大多数不可序列化的问题在线获取非常基本的数据作为他们的sc.parallelize() 的输入,在地图部分他们遇到不可序列化的问题,但我的是一种类型。我有一个特定的数据类型,它来自第三方库并且不可序列化。
所以写这个显示 NotSerializableException :
val data: RDD[ThirdPartyLib.models.XData] = sc.parallelize(ThirdPartyLib.getX)
data.foreachPartition(rows => {
rows.foreach(row => {
println("value: " + row.getValue)
})
})
作为解决方案,我在内部创建了相同的模型类(XData),但使其可序列化并执行此操作:
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 encountered
java.io.NotSerializableException: ThirdPartyLib.models.XData 相同的错误。当我创建内部可序列化类型时,问题不应该重新解决吗?我该如何解决这个问题?
【问题讨论】:
-
这里的
XData是什么?可以分享一下内容吗? -
我不知道我是否可以分享内容。但它只是一个简单的 pojo 类,具有属性和简单的 getter/setter。
-
ThirdPartyLib.getX是否返回XData对象列表? -
是的。
ThirdPartyLib.getX返回XData的列表。
标签: scala apache-spark rdd serializable