Spark GraphX で始めるグラフ解析

Preview:

Citation preview

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

クリスマスに働く人のイラスト © いらすとや

Recommended