GraphX Advent Calendar - Day 04 - 表構造データからグラフデータを生成する

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

GraphX Advent Calendar 2014 - Adventar 4日目です。

Day03では、辺の構造のデータからグラフデータを生成しましたが、今日は、普通の表構造のデータからグラフデータを生成してみます。

読み込み時に複雑なデータモデルから読み込み

GraphLoader.edgeListFileで辺情報からグラフを生成するのは、シンプルな例です。本格的な開発の場合には、頂点情報と辺情報のふたつからグラフを生成します。

Day02でも簡単な例を示しましたが、今日はもう少し複雑なデータからグラフを生成します。

master.csv

id name value
1 Taro 100
2 Jiro 200
3 Sabo 300

connection.csv

id from to value date
1 1 2 100 2014/12/1
2 2 3 200 2014/12/2
3 3 1 300 2014/12/3

まずは頂点情報をRDDにロードします。

val vertexLines = sc.textFile("graphdata/day02-02-vertices.csv")
val vertices: RDD[(VertexId, (String, Long))]
  = vertexLines.map(line => {
    val cols = line.split(",")
    (cols(0).toLong, (cols(1), cols(2).toLong))
})

頂点クラスを、RDD[(VertexId, (String, Long))] と宣言しています。これは頂点情報として、(String, Long)のタプル型の値を持つということです。この宣言に従って、CSVから読み込んだ値をセットしています。

次に、辺情報をRDDにロードします。

val format = new java.text.SimpleDateFormat("yyyy/MM/dd")
val edgeLines = sc.textFile("graphdata/day02-02-edges.csv")
val edges:RDD[Edge[((Long, java.util.Date))]]
  = edgeLines.map(line => {
    val cols = line.split(",")
    Edge(cols(0).toLong, cols(1).toLong, (cols(2).toLong, format.parse(cols(3))))
})

こちらでは、RDD[Edge[( (Long, java.util.Date) )] ] と宣言しています。これは辺情報として、(Long, java.util.Date)のタプル型の値を持つということです。この宣言に従って、CSVから読み込んだ値をセットしています。

あとは、このふたつを合わせてグラフデータとして生成するだけです。

val graph:Graph[(String, Long), (Long, java.util.Date)] = Graph(vertices, edges)

次回予告

明日は、このグラフデータの辺や頂点、そして、トリプレットの編集処理を見ていきたいと思います。

※ 今日説明したソースは、graphx-advent-samples/Day04.scala at master · ironpeace/graphx-advent-samples · GitHubをご参照ください。