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)
}

ただし、収集機能を追加して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
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 に答える
0

em...問題は、ドライバーとワーカーを理解していないことです...collect関数を呼び出すと、すべてのデータがドライバーに収集され、foreach関数がうまく機能しているように見えます。実際、graph.vertices.foreachエラーは報告されていませんよね?実際にはうまく機能するので、ワーカーのログに情報を出力するだけです。私が言ったことを知っていますか?それが役に立てば幸い。

于 2015-07-19T11:46:06.793 に答える