GraphX Advent Calendar - Day 09 - グラフに対する編集処理
GraphX Advent Calendar 2014 - Adventar 9日目です。
Day 06 から 08 にかけて、辺や頂点に対する編集処理を見てきましたが、今日は、グラフ全体に対する編集処理を見ていきたいと思います。
reverse
とはいえ、これはEdgeRDD.reverse と変わりません。
各Edgeが持つSrcとDstを逆転させます。
graph.reverse.edges.collect.foreach(println(_))
subgraph
これは、グラフ全体の中から特定の条件で抽出する関数です。頂点に対する条件、辺に対する条件、あるいはその両方に対する条件で抽出することができます。
頂点に対する条件で抽出
graph.subgraph(vpred = (vid, v) => v._2 >= 200).vertices.collect.foreach(println(_))
辺に対する条件で抽出
graph.subgraph(epred = edge => edge.attr._1 >= 200).edges.collect.foreach(println(_))
辺と頂点に対する条件で抽出
val subGraph = graph.subgraph(vpred = (vid, v) => v._2 >= 200, epred = edge => edge.attr._1 >= 200)
mask
うーん、これよく分からなかったです。
何がどうマスクされるのか…。
バグか…?
もうちょっと調査してみます。
groupEdges
グラフにおいて、ひとつの頂点の組み合わせの中で、複数の辺が存在する時にそれをマージする処理です。
val edgeGroupedGraph:Graph[(String, Long), (Long, java.util.Date)] = graph2.groupEdges(merge = (e1, e2) => (e1._1 + e2._1, if(e1._2.getTime < e2._2.getTime) e1._2 else e2._2))
次回予告
ここまではグラフ構造データのベーシックなデータ処理について見てきましたが、明日からはもう少しグラフっぽい処理を見ていきたいと思います。
※ 今日のサンプルソースはこちらを御参照ください。
graphx-advent-samples/Day09.scala at master · ironpeace/graphx-advent-samples · GitHub