GraphX Advent Calendar - Day 08 - EdgeRDD

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

GraphX Advent Calendar 2014 - Adventar 8日目です。

一昨日説明した、VertexRDD と EdgeRDD について、昨日は VertexRDD の処理を紹介しましたが、今日は EdgeRDD です。

mapValues

Day05 でも紹介した、それぞれの辺の編集処理を行うための関数です。

val mappedEdges:EdgeRDD[Long, (String, Long)] = edges.mapValues(edge => edge.attr._1 + 1)

reverse

各辺で持っている、接続元頂点(Src)と接続先頂点(Dst)を逆転させる処理です。

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

innerJoin

同じ PartitionStrategy を使っているEdgeRDD をJOINします。

val e2:RDD[Edge[String]]
  = sc.textFile("graphdata/day08-edges.csv").map(line => {
  val cols = line.split(",")
  Edge(cols(0).toLong, cols(1).toLong, cols(2))
})

val graph2:Graph[(String, Long), String] = Graph(v, e2)
val edges2 = graph2.edges
val innerJoinedEdge:EdgeRDD[(Long, java.util.Date, String), (String, Long)]
  = edges.innerJoin(edges2)((v1, v2, attr1, attr2) => (attr1._1, attr1._2, attr2))

次回予告

今日まで3日間かけて、辺と頂点を編集する処理を見てきましたが、明日はグラフ全体に対する編集処理を見ていきたいと思います。

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