0
我有一篇文章类Apache Spark:保留GraphX中的自定义类:不可序列化?
case class Article(articleName:String,
id:Option[Long],
authors: Iterator[Author],
keywords: Iterator[String])
(作者是拥有4个选项字符串类)
,我想创建一个图形出来。我创建了顶点的RDD和边缘
val vertices: RDD[(VertexId, Article)] = articles.map(article => (article.id.get , article))
的RDD当我创建我的图表:
val graph = Graph(vertices, edges)
我得到以下错误(缩短):
java.io.NotSerializableException: scala.collection.LinearSeqLike$$anon$1
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
我不知道我明白为什么我不能做我正在做的事情?
如果我使用一个列表,似乎在我的代码,我失去了所有的美好能力我用它来构建我的图形,如地图,过滤器等,我会考虑的解决方法... – Stephane
您可以构建就像你现在所做的那样''Iterator',并且最后只做一个'toList'。 (也就是说,我不太清楚你的投诉是什么,因为'List'支持'map','filter'等等)。你需要一个固定的值来发送整个集群,而不是一些懒惰的按需计算的'Iterator',因为有希望的原因很明显。 (如果'authors'和'keywords'是非常大的集合,你可以把它们变成'RDD's然后'zip'或'product'或'join'与你的其他RDDs),而不是试图将它们包含进去一个案例类。 – lmm