1

希望有人可以提供帮助。

我正在尝试编写一个程序,该程序需要对连接到 graphx 网络中每个节点的每个边 ID 执行一个函数。

为此,我想遍历每个节点并识别与其连接的所有边,然后我想用函数遍历每个边。在 foreach 循环中进行任何类型的子图或过滤时,我的问题似乎出现了。

因此,例如下面的代码应该输出连接到节点的每条边的 id

graph.vertices.foreach {
  network => 
    val KeyVert = network._1
val EGraph = graph.subgraph(e => e.dstId == KeyVert)
println(KeyVert)
EGraph.edges.foreach(println)
}

但是,只有添加 collect 函数以从 rdd 收集图形数据时,它才会起作用,例如

graph.vertices.collect.foreach {
  network => 
    val KeyVert = network._1
val EGraph = graph.subgraph(e => e.dstId == KeyVert)
println(KeyVert)
EGraph.edges.foreach(println)
}

网络太大而无法收集边缘数据,因此非常感谢任何帮助。

4

2 回答 2

0

em...问题是您不了解驱动程序和工作人员...当您调用collect函数时,所有数据都收集到驱动程序,然后foreach函数看起来运行良好。其实graph.vertices.foreach没报错吧?因为它真的很好用,只需打印工人日志中的信息。你知道我说什么吗?希望能帮助到你。

于 2015-07-19T11:46:06.793 回答
0
graph.vertices.map {
  network => 
    val KeyVert = network._1
  val EGraph = graph.subgraph(e => e.dstId == KeyVert)
  println(KeyVert)
  EGraph.edges.map(println)
}

这可能会解决你的问题。

于 2015-12-19T02:55:49.260 回答