2016-12-16 5 views
0

Ich bin schwer zu verstehen, wie ich das folgende in GraphX ​​in Apache Funke erstellen werde. Ich bin mit der folgenden:Wie erstelle ich ein Graph in GraphX ​​mit dieser

einer hdfs Datei, die Lasten von Daten aufweist, die in Form kommen:

node: ConnectingNode1, ConnectingNode2..

Zum Beispiel:

123214: 521345, 235213, 657323

Ich muß irgendwie in einem diese Daten speichern EdgeRDD, damit ich mein Diagramm in GraphX ​​erstellen kann, aber ich habe keine Ahnung, wie ich das machen werde.

Antwort

1

Nachdem Sie Ihre hdfs Quelle gelesen und haben Sie Ihre Daten in rdd, können Sie so etwas wie die folgenden versuchen:

import org.apache.spark.rdd.RDD 
import org.apache.spark.graphx.Edge 
// Sample data 
val rdd = sc.parallelize(Seq("1: 1, 2, 3", "2: 2, 3")) 

val edges: RDD[Edge[Int]] = rdd.flatMap { 
    row => 
    // split around ":" 
    val splitted = row.split(":").map(_.trim) 
    // the value to the left of ":" is the source vertex: 
    val srcVertex = splitted(0).toLong 
    // for the values to the right of ":", we split around "," to get the other vertices 
    val otherVertices = splitted(1).split(",").map(_.trim) 
    // for each vertex to the right of ":", we create an Edge object connecting them to the srcVertex: 
    otherVertices.map(v => Edge(srcVertex, v.toLong, 1)) 
} 

bearbeiten

Außerdem, wenn Sie Ihre Ecken haben ein konstantes Standardgewicht, Sie können Ihren Graphen direkt von den Kanten erstellen, so dass Sie keine VerticesRDD erstellen müssen:

import org.apache.spark.graphx.Graph 
val g = Graph.fromEdges(edges, defaultValue = 1) 
+0

th Anks für all deine Hilfe !! Ich folgte dem, was du gesagt hast, und war in der Lage, ein Val-Diagramm zu erstellen. Ich versuchte nur einen Weg zu finden, um zu sehen, ob es funktionierte! –

+0

Ich habe versucht, es so zu tun, wie Sie sagten, nur etwas, das nicht funktionierte, war RDD [Edge [Int], also habe ich nur RDD benutzt. aber erhalten Sie immer die folgenden Fehler: : 43: Fehler: nicht gefunden: Wert Edge andereVertices.map (v => Edge (srcVertex, v.toLong, 1)) ^ : 43: Fehler: Typ nicht übereinstimmen; gefunden: Array [Nothing] erforderlich: TraversableOnce [?] otherVertices.map (v => Kante (srcVertex, v.toLong, 1)) –

+0

Haben Sie die Edge-Klasse importiert? 'import org.apache.spark.graphx.Edge'. Das ist wahrscheinlich das Problem und auch warum 'RDD [Edge [Int]]' nicht funktioniert –

Verwandte Themen