Spark GraphX で始めるグラフ解析
-
Upload
yosuke-mizutani -
Category
Technology
-
view
328 -
download
2
Transcript of Spark GraphX で始めるグラフ解析
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 10 21 21 33 44 54 65 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: 2Node: 1 -> Degree: 3Node: 2 -> Degree: 2Node: 3 -> Degree: 2Node: 4 -> Degree: 3Node: 5 -> Degree: 2Node: 6 -> Degree: 2
Main.scala
出力例
コード例
次数中心性の計算
32
32
22
2
コード例
媒介中心性の計算▸ なかなか大変 ( 説明省略 )
コード例
媒介中心性の計算▸ 実行結果Node: 0 -> Betweenness: 0.0Node: 1 -> Betweenness: 8.0Node: 2 -> Betweenness: 0.0Node: 3 -> Betweenness: 9.0Node: 4 -> Betweenness: 8.0Node: 5 -> Betweenness: 0.0Node: 6 -> Betweenness: 0.0
出力例
コード例
媒介中心性の計算
80
80
90
0
後日談
性能面の課題▸ グラフ操作の種類 ( アルゴリズム ) によって得手不得手がある▸ Spark ノード間の通信コスト▸ Spark の UI でモニタリングしつつチューニングを繰り返す
後日談
C++ で実装し直した▸ とある処理の所要時間 : 854 日 (GraphX) -> 15 日 (C++)
60 倍 高速化 !
Thanks!
ご清聴ありがとうございました
▸ コード例はこちら▸ https://github.com/mogproject/example-graphx
クリスマスに働く人のイラスト © いらすとや