Spark GraphX
で始めるグラフ解析
市ヶ谷Geek★Night#11 Lightning Talk
2016-12-21 @mogproject
About me
http://mogproject.com
Spark GraphX
Apache Spark GraphX とは
▸Spark に標準で組み込まれているグラフ処理 API
▸Spark クラスタ = データストア / 計算資源
▸大規模グラフを扱いやすい
Spark GraphX
今回お話しする「グラフ」は・・・
Why GraphX?
実用例
▸大規模グラフの分析プロジェクト (論文の共著者関係分析)
▸ノード数: 500万〜 エッジ数: 9000万〜
▸最初は Python製 の NetworkX を使っていた
▸グラフが大きくなるにつれ、メモリ不足が発生
▸Scala / Spark に慣れているなら手軽に利用可能
Why GraphX?
実用例: (無向)グラフの中心性計算
▸次数中心性
▸次数 = 各ノードに接続しているエッジの数
▸直接的なつながりの多いノードを発見できる
▸媒介中心性
▸全てのノードの組に対して最短経路を求める
▸より多くの組の最短経路上に位置するノードを計算
コード例
build.sbt
▸"spark-graphx" への依存を追加
▸Scala 2.12 には未対応
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.0.2",
"org.apache.spark" %% "spark-graphx" % "2.0.2"
)
build.sbt
コード例
グラフデータの読み込み
▸エッジリストからグラフを生成する例
0 1
0 2
1 2
1 3
3 4
4 5
4 6
5 6
edge_list_1.txt
コード例
グラフデータの読み込み
▸GraphLoader のメソッドを利用する
import org.apache.spark._
import org.apache.spark.graphx._
val conf = new SparkConf().setMaster(s"local[2]")
val sc = new SparkContext(conf)
val g: Graph[Int, Int] =
GraphLoader.edgeListFile(sc, "path/to/edge_list.txt")
Main.scala
コード例
次数中心性の計算
▸Graph#degrees を呼び出すだけ
g.degrees.sortByKey().collect().foreach { case (n, v) =>
println(s"Node: ${n} -> Degree: ${v}")
}
Node: 0 -> Degree: 2
Node: 1 -> Degree: 3
Node: 2 -> Degree: 2
Node: 3 -> Degree: 2
Node: 4 -> Degree: 3
Node: 5 -> Degree: 2
Node: 6 -> Degree: 2
Main.scala
出力例
コード例
次数中心性の計算
3
2
3
2
2
2
2
コード例
媒介中心性の計算
▸なかなか大変 (説明省略)
コード例
媒介中心性の計算
▸実行結果
Node: 0 -> Betweenness: 0.0
Node: 1 -> Betweenness: 8.0
Node: 2 -> Betweenness: 0.0
Node: 3 -> Betweenness: 9.0
Node: 4 -> Betweenness: 8.0
Node: 5 -> Betweenness: 0.0
Node: 6 -> Betweenness: 0.0
出力例
コード例
媒介中心性の計算
8
0
8
0
9
0
0
後日談
性能面の課題
▸グラフ操作の種類 (アルゴリズム) によって得手不得手があ
る
▸Spark ノード間の通信コスト
▸Spark の UI でモニタリングしつつチューニングを繰り返す
後日談
C++ で実装し直した
▸とある処理の所要時間: 854日 (GraphX) -> 15日 (C++)
60 倍 高速化!
Thanks!
ご清聴ありがとうございました
▸コード例はこちら
▸https://github.com/mogproject/example-graphx
クリスマスに働く人のイラスト ©︎いらすとや

Spark GraphX で始めるグラフ解析

Editor's Notes

  • #3 昨年まで市ヶ谷で Scala エンジニア 今年からアメリカに留学、人生ニューゲーム、スーパーマリオラン
  • #5 点と線で表現されるデータ構造 関係性の分析に適している 点をノード、線をエッジと呼ぶ
  • #9 ダンベル型のグラフ
  • #15 3番のノードは、次数は低いのものの、媒介中心性が高い