【发布时间】:2015-06-17 21:33:14
【问题描述】:
我一直有关于 Task not Serializable 的错误。
我创建了一个小类,它扩展了 Serializable - 我认为当您需要对其中的值进行序列化时就是这种情况。
class SGD(filePath : String) extends Serializable {
val rdd = sc.textFile(filePath)
val mappedRDD = rdd.map(x => x.split(" ")
.slice(0,3))
.map(y => Rating(y(0).toInt, y(1).toInt, y(2).toDouble))
.cache
val RNG = new Random(1)
val factorsRDD = mappedRDD(x => (x.user, (x.product, x.rating)))
.groupByKey
.mapValues(listOfItemsAndRatings =>
Vector(Array.fill(2){RNG.nextDouble}))
}
最后一行总是导致Task not Serializable 错误。我不明白的是:类是可序列化的;并且,Random 类也可以根据API 进行序列化。那么,我做错了什么?我一直无法让这样的东西发挥作用;因此,我想我的理解是错误的。我一直被告知该类必须是可序列化的......好吧,它仍然不起作用!?
【问题讨论】:
-
Rating可以序列化吗? -
我可以理解您遵循 scala 约定在一行中编写所有功能。但是请尝试拆分这一行并分别编写每个功能,以便您可以找出瓶颈。
标签: scala serialization apache-spark rdd