2016-05-05 6 views
2

私は3つの列、vertex1、vertex2、weightを持つデータフレームdfMasterを持っています。私はGraphXを作成しようとしているV1とV2からの頂点とそれらの間に対応する重みを持つエッジを持つ重み付きグラフ。Spark Scala GraphX:重み付き指向グラフの作成

val edgeDF = dfMaster.select($"vertex1", $"vertex2", $"weight").distinct() 
val vertexDF = (dfMaster.select("vertex1").toDF().unionAll(DFMaster.select("vertex2").toDF())).distinct() 

これを加重グラフにロードするにはどうすればよいですか?助けてくれてありがとう。

答えて

3

私が知る限り、Spark GraphXは現在、RDDからの作成のみをサポートしています。グラフ作成のために利用できる主な方法は、以下のクラスで見つけることができます:

import org.apache.spark.sql.Row 
import org.apache.spark.graphx.{Graph, Edge} 

val edgeDF = dfMaster.select($"vertex1", $"vertex2", $"weight").distinct() 

val edgeRDD = edgeDF.map { 
    case Row(srcId: Double, dstId: Double, wgt: Double) => Edge[Double](srcId.toLong, dstId.toLong, wgt) 
} 

val graph = Graph.fromEdges[Int, Double](edgesRDD, 0) 

:あなたのケースのために

、私は次のコードを示唆しますfromEdges上記の方法は、エッジから頂点を推定し、属性として0を設定します。

仮定:

  • vertex1vertex2weightDoubleの列です。
  • 頂点の属性情報はありません。すべてが0で作成されていれば問題ありません。
+0

お世話になりました。頂点1、頂点2、頂点3の型はすべて倍です。私は先に進んでコードを修正し、それを倍に変更しました。しかし、私がedgeRDD行を走らせたとき、Edge [Double](srcId、dstId、wgt)で3つのエラーが出ます:type mismatch、found double、required org.apache.spark.graphx.VertexId。これが何を意味するのか知っていますか? – mt88

+0

頂点IDの型はLong(またはLongのサブタイプであるVertexId)でなければなりません –

+0

ダブル型データのコードを変更しました –

関連する問題