如何在 Spark Scala 中使用 Graph.fromEdgeTuples 从 CSV 文件创建图表

Ade*_*asa 4 csv scala apache-spark rdd spark-graphx

Spark我是和的新手Scala,我正在尝试执行一项简单的任务,即根据文本文件中的数据创建图形。

从文档中

https://spark.apache.org/docs/0.9.0/api/graphx/index.html#org.apache.spark.graphx.Graph $@fromEdges[VD,ED]%28RDD[Edge[ED]], VD%29%28ClassTag[VD],ClassTag[ED]%29:图表[VD,ED]

我可以看到我可以创建一个图表tuples of vertices

我的简单文本文件如下所示,其中每个数字都是一个顶点:

v1 v3
v2 v1
v3 v4
v4
v5 v3
Run Code Online (Sandbox Code Playgroud)

当我从文件中读取数据时

val myVertices = myData.map(line=>line.split(" ")) 我得到一个 RDD[Array[String]]。

我的问题是:

  1. 如果这是解决问题的正确方法,我如何将其转换RDD[Array[String]]为正确的格式,根据文档是RDD[(VertexId, VertexId)](也VertexID必须是长类型,并且我正在使用字符串)

  2. 是否有另一种更简单的方法可以从类似的 csv 文件结构构建图表?

任何建议都将非常受欢迎。谢谢!

bob*_*bob 5

有多种方法可以从文本文件创建图形。

此代码从Graph.fromEdgeTuples方法创建一个图

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.graphx.GraphLoader
import scala.util.MurmurHash
import org.apache.spark.graphx.Graph
import org.apache.spark.rdd.RDD
import org.apache.spark.graphx.VertexId

object GraphFromFile {
  def main(args: Array[String]) {

    //create SparkContext
    val sparkConf = new SparkConf().setAppName("GraphFromFile").setMaster("local[*]")
    val sc = new SparkContext(sparkConf)

    // read your file
    /*suppose your data is like 
    v1 v3
    v2 v1
    v3 v4
    v4 v2
    v5 v3
    */
    val file = sc.textFile("src/main/resources/textFile1.csv");

    // create edge RDD of type RDD[(VertexId, VertexId)]
    val edgesRDD: RDD[(VertexId, VertexId)] = file.map(line => line.split(" "))
      .map(line =>
        (MurmurHash.stringHash(line(0).toString), MurmurHash.stringHash(line(1).toString)))

    // create a graph 
    val graph = Graph.fromEdgeTuples(edgesRDD, 1)

    // you can see your graph 
    graph.triplets.collect.foreach(println)

  }
}
Run Code Online (Sandbox Code Playgroud)

使用MurmurHash.stringHash是因为文件包含 String 形式的顶点。如果它是数字类型,那么就不需要它。