GraphX Advent Calendar - Day 06 - VertexRDD と EdgeRDD とは
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