GraphX Advent Calendar - Day 02 - GraphX はじめの一歩
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
これは以下のような簡単なグラフ構造になります。
辺情報だけで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
にもアップしていますので、確認ください。
明日は、グラフにいろいろなデータを持たせてみようと思います。