GraphX Advent Calendar - Day 10 - 次数情報の計算と、隣接情報の収集
GraphX Advent Calendar 2014 - Adventar 10日目です。今日からは、グラフ処理っぽい処理を扱っていきます。
次数情報の計算
次数( degree )とは、頂点に接続している辺の数のことです。その頂点に接続してきている辺の数を入次数( in degree )、その頂点から接続している辺の数を出次数( out degree )といいます。
次数情報の出力結果は、( VertexID, Int ) というタプル型で得られます。
入次数の計算
graph.inDegrees.collect.foreach(d => println(d._1 + "'s inDegree is " + d._2))
出次数の計算
graph.outDegrees.collect.foreach(d => println(d._1 + "'s outDegree is " + d._2))
次数の計算(入・出合わせて)
graph.degrees.collect.foreach(d => println(d._1 + "'s degree is " + d._2))
隣接情報の収集
隣接情報とは、その頂点に直接接続している頂点、つまり、お隣さんの情報です。
collectNeighborIds
この関数では、隣接頂点のID情報だけ取得することができます。取得結果は、( VertexID, Array ( VertexID) ) というタプル型で得られます。
接続元の隣接頂点を収集
graph.collectNeighborIds(EdgeDirection.In).collect .foreach(n => println(n._1 + "'s in neighbors : " + n._2.mkString(",")))
接続先の隣接頂点を収集
graph.collectNeighborIds(EdgeDirection.Out).collect .foreach(n => println(n._1 + "'s out neighbors : " + n._2.mkString(",")))
接続先・元に関わらず隣接頂点を収集
graph.collectNeighborIds(EdgeDirection.Either).collect .foreach(n => println(n._1 + "'s neighbors : " + n._2.distinct.mkString(",")))
collectNeighbors
この関数では、隣接頂点の情報そのままを取得することができます。取得結果は、( VertexID, Array ( ( VertexID, VD ) ) ) というタプル型で得られます。
接続元の隣接頂点を収集
graph.collectNeighbors(EdgeDirection.In).collect .foreach(n => println(n._1 + "'s in neighbors : " + n._2.mkString(",")))
接続先の隣接頂点を収集
graph.collectNeighbors(EdgeDirection.Out).collect .foreach(n => println(n._1 + "'s out neighbors : " + n._2.mkString(",")))
接続先・元に関わらず隣接頂点を収集
graph.collectNeighbors(EdgeDirection.Either).collect .foreach(n => println(n._1 + "'s neighbors : " + n._2.distinct.mkString(",")))
次回予告
明日は、いよいよグラフ処理で最も有名な、ページランクアルゴリズムについて見ていきます!
今日のサンプルソールはこちらを御参照ください。
graphx-advent-samples/Day10.scala at master · ironpeace/graphx-advent-samples · GitHub