GraphX Advent Calendar - Day 02 - GraphX はじめの一歩

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

GraphX Advent Calendar二日目です。今日は GraphX をひとまず始めるにあたっての手順をまとめてみます。

はじめの一歩

まずは 以下のように依存性を解決します。

project/GraphXAdventSamplesBuild.scala

import sbt._
import sbt.Keys._

object GraphXAdventSamplesBuild extends Build {
  lazy val graphxsamples = Project(
    id = "graphx-advent-samples",
    base = file("."),
    settings = Project.defaultSettings ++ Seq(
      name := "graphx-advent-samples",
      organization := "com.teppeistudio",
      version := "0.1-SNAPSHOT",
      scalaVersion := "2.10.4",
      libraryDependencies += "org.apache.spark" %% "spark-core" % "1.1.0",
      libraryDependencies += "org.apache.spark" %% "spark-graphx" % "1.1.0",
      libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.1.0",
      resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
    )
  )
}

また、GraphXのプログラムを書くソースに、以下のようにImport文をセットすれば、準備OKです。

import org.apache.spark._
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD


ではまず、以下のような 辺の一覧のデータを用意します。

day02.tsv

1 2
2 3
3 1

これは以下のような簡単なグラフ構造になります。

f:id:teppei-studio:20141201235908p:plain

辺情報だけでGraphデータに変換するには、以下の1文でOKです。

val graph = GraphLoader.edgeListFile(sc, "graphdata/day02.tsv").cache()

さて、これで生成されたグラフデータの中身を確認してみましょう。

以下で、頂点の情報を確認することができます。

graph.vertices.collect.foreach(println(_))


出力結果

(1,1)
(3,1)
(2,1)

左の数字は、頂点のIDです。辺のリストに出てくるIDを自動で頂点のIDとして扱ってくれています。

右の数字は、各頂点に持つ値です。今回インプットしたのは辺のリストだけで、頂点に持たせる値はしていませんので、デフォルトで1という値がセットされています。

次に、以下で辺の情報を確認することができます。

graph.edges.collect.foreach(println(_))


出力

Edge(1,2,1)
Edge(2,3,1)
Edge(3,1,1)

左2列の数字は、辺が繋がっている頂点のIDを示しています。インプットした辺の情報のそのままのID値がセットされています。右端の列の数字は、辺に持たされた値の情報です。頂点の値同様、今回のインプットでは特に指定していないので、デフォルトで1が入っています。

さて、今日はここまでです。今回作成したサンプルプログラムは
GitHub
にもアップしていますので、確認ください。

明日は、グラフにいろいろなデータを持たせてみようと思います。