GraphX Advent Calendar - Day 06 - VertexRDD と EdgeRDD とは

f:id:teppei-studio:20100306105411j:plain

GraphX Advent Calendar 2014 - Adventar
GraphX Advent Calendar 2014 - Adventar 6日目です。Day05 では、頂点の情報の編集や、辺の情報の編集方法を紹介しましたが、他にも頂点や辺の情報を扱う処理は、GraphXによって準備されています。それらの処理を持つのが、VertexRDD と EdgeRDD です。

さて、今日もまずはグラフデータを作るところから始めましょう。

val vertexLines: RDD[String] = sc.textFile("graphdata/day03-01-vertices.csv")
val v: RDD[(VertexId, (String, Long))]
  = vertexLines.map(line => {
    val cols = line.split(",")
    (cols(0).toLong, (cols(1), cols(2).toLong))
})

val format = new java.text.SimpleDateFormat("yyyy/MM/dd")
val edgeLines: RDD[String] = sc.textFile("graphdata/day03-01-edges.csv")
val e:RDD[Edge[((Long, java.util.Date))]]
  = edgeLines.map(line => {
    val cols = line.split(",")
    Edge(cols(0).toLong, cols(1).toLong, (cols(2).toLong, format.parse(cols(3))))
})

val graph:Graph[(String, Long), (Long, java.util.Date)] = Graph(v, e)

上の例では、グラフを作る時は、頂点は以下のような型のデータとして作ります。

RDD[(VertexId, (String, Long))]

しかし、グラフから取り出すと、以下のような型になっています。

val vertices:VertexRDD[(String, Long)] = graph.vertices

辺も同様に、作る時は、以下のような型のデータとして作りますが、

RDD[Edge[((Long, java.util.Date))]]

グラフから取り出すと、以下のような型になっています。

val edges:EdgeRDD[(Long, java.util.Date), (String, Long)] = graph.edges

このVertexRDDや、EdgeRDDは、RDDを拡張したクラスで、グラフから取り出した頂点情報や辺情報を編集するのに、いくつかの便利な関数を用意してくれています。明日以降でそれを見ていきたいと思います。


尚、Day06からDay08までのサンプルソースはこちらで御参照いただけます。
graphx-advent-samples/Day06_08.scala at master · ironpeace/graphx-advent-samples · GitHub