我是scala和graphx的新手,在将tsv文件转换为图表时遇到问题。 我有一个平面标签分隔文件,如下所示:
n1 P1 n2
n3 P1 n4
n2 P2 n3
n3 P2 n1
n1 P3 n4
n3 P3 n2
其中n1,n2,n3,n4是图的节点,R1,P2,P3是应该在节点之间形成边的属性。
如何在SPARK GraphX中根据上述文件构建图表? 示例代码非常有用。
答案 0 :(得分:13)
有一些代码(当然你应该使用sbt在jar文件中构建它):
package vinnie.pooh
import org.apache.spark.SparkContext._
import org.apache.spark._
import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD
object Main {
def main(args: Array[String]) {
if (args.length != 1) {
System.err.println(
"Should be one parameter: <path/to/edges>")
System.exit(1)
}
val conf = new SparkConf()
.setAppName("Load graph")
.setSparkHome(System.getenv("SPARK_HOME"))
.setJars(SparkContext.jarOfClass(this.getClass).toList)
val sc = new SparkContext(conf)
val edges: RDD[Edge[String]] =
sc.textFile(args(0)).map { line =>
val fields = line.split(" ")
Edge(fields(0).toLong, fields(2).toLong, fields(1))
}
val graph : Graph[Any, String] = Graph.fromEdges(edges, "defaultProperty")
println("num edges = " + graph.numEdges);
println("num vertices = " + graph.numVertices);
}
}
我有edge.txt:
1 Prop12 2
2 Prop24 4
4 Prop45 5
5 Prop52 2
6 Prop65 7
然后,例如,您可以在本地启动它:
$ SPARK_HOME&gt; ./ bin / spark-submit --class vinnie.pooh.Main --master local [2]〜/ justBuiltJar.jar~ / edge.txt