2

Spark graphX でグラフを作成するために以下のコードを実行するとエラーが発生します。次のコマンドでspark-shellを介して実行しています:./bin/spark-shell -i ex.scala

入力:

My Vertex File looks like this (each line is a vertex of strings):
word1,word2,word3
word1,word2,word3
...
My Edge File looks like this: (edge from vertex 1 to vertex 2)
1,2
1,3

コード:

// Creating Vertex RDD (Input file has 300+ records with each record having list of strings separated by delimiter (,).
//zipWithIndex done to get an index number for all the entries - basically numbering rows
val vRDD: RDD[(VertexId, Array[String])] = (vfile.map(line => line.split(","))).zipWithIndex().map(line => (line._2, line._1))

// Creating Edge RDD using input file
//val eRDD: RDD[Edge[Array[String]]] = (efile.map(line => line.split(",")))

val eRDD: RDD[(VertexId, VertexId)] = efile.map(line => line.split(","))

// Graph creation
val graph = Graph(vRDD, eRDD)

エラー:

Error:
<console>:52: error: type mismatch;
found   : Array[String]
required: org.apache.spark.graphx.Edge[Array[String]]
          val eRDD: RDD[Edge[Array[String]]] = (efile.map(line =>    line.split(",")))

<console>:57: error: type mismatch;
 found   : org.apache.spark.rdd.RDD[(org.apache.spark.graphx.VertexId,   org.apache.spark.graphx.VertexId)]
required: org.apache.spark.rdd.RDD[org.apache.spark.graphx.Edge[?]]
Error occurred in an application involving default arguments.
       val graph = Graph(vRDD, eRDD)
4

2 に答える 2

1

は- あなたEdgeattrタイプは何attrですか? それが であると仮定してInt、それをゼロに初期化しましょう:

これの代わりに:

val eRDD: RDD[(VertexId, VertexId)] = efile.map(line => line.split(","))

これを試して:

val eRDD: RDD[Edge[Int]] = efile.map{ line => 
  val vs = line.split(",");
  Edge(vs(0).toLong, vs(1).toLong, 0)
}
于 2015-11-06T14:26:38.760 に答える
0

あなたが与えた例に基づいて、頂点と辺を持つ2つのファイルを作成しました:

val vfile = sc.textFile("vertices.txt")
val efile = sc.textFile("edges.txt")

次に、頂点とエッジの RDD を作成します。

val vRDD: RDD[(VertexId, Array[String])] = vfile.map(line => line.split(","))
                               .zipWithIndex()
                               .map(_.swap) // you can use swap here instead of what you are actually doing.

// Creating Edge RDD using input file
val eRDD: RDD[Edge[(VertexId, VertexId)]] = efile.map(line => {
  line.split(",", 2) match {
    case Array(n1, n2) => Edge(n1.toLong, n2.toLong)
  }
})

頂点とエッジの RDD を作成したら、グラフを作成できます。

val graph = Graph(vRDD, eRDD)
于 2015-11-06T14:10:44.760 に答える