如何在graphx中构建图形

时间:2014-10-13 22:08:48

标签: scala graph apache-spark scala-collections scala-2.10

我是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中根据上述文件构建图表? 示例代码非常有用。

1 个答案:

答案 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