GraphX Advent Calendar - Day 01 - GraphX とは

f:id:teppei-studio:20100306105411j:plain

はじまりました、 GraphX Advent Calendar 。予想通り、今のところ私一人しかエントリーしてませんね。このまま25日間一人で完走することも厭わない所存でございます。

まず1日目は、GraphX の紹介しておきます。

GraphX とは

GraphX は、Apache Sparkのコンポーネントの一つで、大容量グラフ構造データの並列分散処理を実装するためのフレームワークです。グラフ構造データとは、頂点と辺からなるデータで、頂点に様々な属性情報を持ったり、辺に属性情報や方向情報を持ったりします。GraphX は、Spark の RDD を拡張して、これらの頂点や辺の情報を分散保持するための RDD を用意してます。また、GraphX は Pregel API を含む、グラフデータを扱うための様々なオペレーターを持っています。さらにグラフ分析タスクをシンプルにするための、様々なグラフアルゴリズムやビルダー機能が追加されつつあります。

GraphX の特徴

GraphXの特徴は、表構造データの分散並列処理と、グラフ構造データの分散並列処理をひとつのシステムに統合して実装できることです。

例えば、以下のような表構造のデータがあったとします。

master.csv
id name value
1 Taro 100
2 Jiro 200
3 Saburo 300
connection.csv
id from to value
1 1 2 100
2 2 3 200
3 3 1 300

これをグラフデータにするのには、以下のようにするだけです。

// 元データを読み込み
val master = sc.textFile(“master.csv”)
val conn = sc.textFile(“connection.csv”)

// 頂点データを生成
val vertices:RDD[(VertexId, String)]
= master.map( line => {
val cols = line.split(“,”)
 (cols(0).toLong, cols(1))})

// 辺データを生成
val edges:RDD[Edge[Long]]
= conn.map( line => {
val cols = line.split(“,”)
 Edge(cols(1).toLong, cols(2).toLong, cols(3).toLong)})

// 頂点データと辺データからグラフを生成
val graph:Graph[String, Long] = Graph(vertices, edges)     

これが、例えば、Giraphという、別のグラフ構造データの並列分散処理技術だと、あらかじめ、以下のようなデータを用意しておかないといけません。

[1, 100, [[2, 100]] ]
[2, 200, [[3, 200]] ]
[3, 300, [[1, 100]] ]

表構造のデータを、あらかじめグラフデータに変換しておかないといけません。GraphXであれば、GpraphX上の処理で、簡単に表構造データをグラフ構造データに変換することができます。

次回予告

さて短いですが、先は長いので、こんなところで終わります。
明日は、GraphX の始め方について書きたいと思います。