2017-04-19 11 views

答えて

1

GraphX内の任意の2つのノード間の最大距離を計算するには、コードはこのようにすることができPregel API

を使用することができます。

import org.apache.spark.graphx.{Graph, VertexId} 
import org.apache.spark.graphx.util.GraphGenerators 

// A graph with edge attributes containing distances 
val graph: Graph[Long, Double] = 
    GraphGenerators.logNormalGraph(sc, numVertices = 100).mapEdges(e => e.attr.toDouble) 
val sourceId: VertexId = 42 // The ultimate source 
// Initialize the graph such that all vertices except the root have distance infinity. 
val initialGraph = graph.mapVertices((id, _) => 
    if (id == sourceId) 0.0 else Double.PositiveInfinity) 
val sssp = initialGraph.pregel(Double.PositiveInfinity)(
    (id, dist, newDist) => math.max(dist, newDist), // Vertex Program 
    triplet => { // Send Message 
    if (triplet.srcAttr + triplet.attr < triplet.dstAttr) { 
     Iterator((triplet.dstId, triplet.srcAttr + triplet.attr)) 
    } else { 
     Iterator.empty 
    } 
    }, 
    (a, b) => math.max(a, b) // Merge Message 
) 
println(sssp.vertices.collect.mkString("\n")) 
+1

答え上記のように複数のノードに一つのソースノードからの距離を計算します先。次に、sssp内の宛先ノードを探す必要があります。 これを行う代わりに、1つの送信元から1つの送信先までの距離を計算することは可能ですか?送信元と送信先を直接指定します。 – Aroon

関連する問題