如何使用此方法在GraphX中创建图形

时间:2016-12-16 18:47:47

标签: scala hadoop apache-spark mapreduce spark-graphx

我很难理解我将如何在Apache spark中创建GraphX中的以下内容。我得到以下信息:

一个hdfs文件,其中包含以下格式的数据:

  

节点:ConnectingNode1,ConnectingNode2 ..

例如:

  

123214:521345,235213,657323

我需要以某种方式将这些数据存储在EdgeRDD中,以便我可以在GraphX中创建我的图形,但我不知道我将如何进行此操作。

1 个答案:

答案 0 :(得分:3)

在您阅读了hdfs来源并将数据放在rdd后,您可以尝试以下内容:

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

修改

此外,如果您的顶点具有恒定的默认权重,您可以直接从边创建图形,因此您不需要创建顶点RDD:

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