2

我有一个父图,我想过滤成多个子图,所以我可以对每个子图应用一个函数并提取一些数据。我的代码如下所示:

val myTerms = <RDD of terms I want to use to filter the graph>
val myVertices = ...
val myEdges = ...
val myGraph = Graph(myVertices, myEdges)

val myResults : RDD[(<Tuple>)] = myTerms.map { x => mySubgraphFunction(myGraph, x) }

其中 mySubgraphFunction 是一个创建子图、执行计算并返回结果数据元组的函数。

当我运行它时,我在 mySubgraphFunction 调用 GraphX.subgraph 时得到一个 Java 空指针异常。如果我在术语的 RDD 上调用 collect,我可以让它工作(还添加了对 RDD 的持久性以提高性能):

val myTerms = <RDD of terms I want to use to filter the graph>
val myVertices = <read RDD>.persist(StorageLevel.MEMORY_ONLY_SER)
val myEdges = <read RDD>.persist(StorageLevel.MEMORY_ONLY_SER)
val myGraph = Graph(myVertices, myEdges)

val myResults : Array[(<Tuple>)] = myTerms.collect().map { x =>
                 mySubgraphFunction(myGraph, x) }

有没有办法让它在我不必调用 collect() 的情况下工作(即使它成为分布式操作)?我正在创建 ~1k 子图,性能很慢。

4

0 回答 0