SlideShare a Scribd company logo
1 of 20
Download to read offline
/ 20
Spark GraphFrames のススメ
ビッグデータ部 加嵜長門
2016年3月23日 道玄坂LT祭り
/ 20
自己紹介
• 加嵜 長門
• 2014年4月~ DMM.comラボ
• Hadoop基盤構築
• Spark MLlib, GraphX, spark.ml, GraphFrames を用いたレコメンド開発
• 好きな言語
• SQL
• Cypher
2
/ 20
GraphFramesとは?
• GraphFrames
• http://graphframes.github.io/
• 分散グラフ処理のための Apache Spark パッケージ
• Spark GraphX と DataFrames (SparkSQL) の統合
• Databricksが2016年3月3日にリリース
3
/ 20
なぜGraphFramesか?
4
生産性(処理の書きやすさ)
スケーラビリティ
GraphFrames
※ 個人の感想です
グラフDB/グラフ処理系製品
/ 20
GraphFramesのメリット
• 高レイヤのAPI
• 数行の記述でグラフの分散処理が実現できる
• グラフデータの構築が容易
• RDBやDataFramesなどのテーブル形式のデータから
手軽にグラフ構造のデータを作成できる
• ブルーオーシャン!
5
https://www.google.co.jp/search?q=graphframes&ie=utf-8&oe=utf-8&hl=ja (2016.3.23現在)
/ 20
GraphFramesを試す
• Sparkと同様、Scala, Java, Python, R向けのAPIを使用可能
• Spark Shell でインタラクティブに試す
• Spark 1.4以上に対応
• DataFramesの利点を活かすなら最新版を推奨
6
# spark をダウンロード
$ wget http://ftp.jaist.ac.jp/pub/apache/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz
$ tar xzvf spark-1.6.0-bin-hadoop2.6.tgz
# graphframesパッケージを指定してspark-shellを起動
$ spark-1.6.0-bin-hadoop2.6/bin/spark-shell --packages graphframes:graphframes:0.1.0-spark1.6
/ 20
GraphFrames – グラフの作成
7
// graphframesパッケージのインポート
scala> import org.graphframes._
import org.graphframes._
// Vertex(頂点)となるDataFrameを作成
scala> val v = sqlContext.createDataFrame(List(
| (0L, "user", "u1"),
| (1L, "user", "u2"),
| (2L, "item", "i1"),
| (3L, "item", "i2"),
| (4L, "item", "i3"),
| (5L, "item", "i4")
| )).toDF("id", "type", "name")
v: org.apache.spark.sql.DataFrame = [id: bigint, type: string, name: string]
u1
u2
ユーザ
i1
i2
i3
i4
アイテム
/ 20
GraphFrames – グラフの作成
8
// Edge(辺)となるDataFrameを作成
scala> val e = sqlContext.createDataFrame(List(
| (0L, 2L, "purchase"),
| (0L, 3L, "purchase"),
| (0L, 4L, "purchase"),
| (1L, 3L, "purchase"),
| (1L, 4L, "purchase"),
| (1L, 5L, "purchase")
| )).toDF("src", "dst", "type")
e: org.apache.spark.sql.DataFrame = [src: bigint, dst: bigint, type: string]
// GraphFrameを作成
scala> val g = GraphFrame(v, e)
g: org.graphframes.GraphFrame = GraphFrame(v:[id: bigint, attr: string, gender: string],
e:[src: bigint, dst: bigint, relationship: string])
u1
u2
i1
i2
i3
i4
購入ログ
/ 20
GraphFrames – アイテムレコメンドの実行例
9
// レコメンドアイテムの問い合わせ例
scala> g.find(
| " (a)-[]->(x); (b)-[]->(x);" +
| " (b)-[]->(y); !(a)-[]->(y)"
| ).groupBy(
| "a.name", "y.name"
| ).count().show()
+----+----+-----+
|name|name|count|
+----+----+-----+
| u1| i4| 2|
| u2| i1| 2|
+----+----+-----+
u1
u2
i1
i2
i3
i4
共通の商品を
購入したユーザ
まだ購入していないアイテムをレコメンド
(b)
(y)
(a)
(x)
/ 20
GraphFrames – サンプルグラフの利用 (1)
10
// スターグラフを作成
scala> val star = examples.Graphs.star(5)
// Tripletsを表示
scala> star.triplets.show()
+------------+----------+--------+
| edge| src| dst|
+------------+----------+--------+
|[1,0,edge-1]|[1,node-1]|[0,root]|
|[2,0,edge-2]|[2,node-2]|[0,root]|
|[3,0,edge-3]|[3,node-3]|[0,root]|
|[4,0,edge-4]|[4,node-4]|[0,root]|
|[5,0,edge-5]|[5,node-5]|[0,root]|
+------------+----------+--------+
0
1
2
3 4
5
node-1
node-2
node-3 node-4
node-5
root
edge-1
edge-2
edge-3 edge-4
edge-5
/ 20
GraphFrames – PageRankの実行例
11
// PageRankを計算
scala> val pr = g.pageRank.resetProbability(0.1).tol(0.01).run()
// PageRankのスコアを表示
scala> pr.vertices.show()
+---+-------+--------+
| id|v_attr1|pagerank|
+---+-------+--------+
| 0| root| 0.55|
| 1| node-1| 0.1|
| 2| node-2| 0.1|
| 3| node-3| 0.1|
| 4| node-4| 0.1|
| 5| node-5| 0.1|
+---+-------+--------+
0
1
2
3 4
5
0.1 0.1
0.1
0.1 0.1
0.55
/ 20
GraphFrames – サンプルグラフの利用 (2)
12
// 友達関係のサンプルグラフを作成
scala> val friends = examples.Graphs.friends
// Tripletsを表示
scala> friends.triplets.show()
+------------+--------------+--------------+
| edge| src| dst|
+------------+--------------+--------------+
|[a,b,friend]| [a,Alice,34]| [b,Bob,36]|
|[b,c,follow]| [b,Bob,36]|[c,Charlie,30]|
|[c,b,follow]|[c,Charlie,30]| [b,Bob,36]|
|[f,c,follow]| [f,Fanny,36]|[c,Charlie,30]|
|[e,f,follow]| [e,Esther,32]| [f,Fanny,36]|
|[e,d,friend]| [e,Esther,32]| [d,David,29]|
|[d,a,friend]| [d,David,29]| [a,Alice,34]|
|[a,e,friend]| [a,Alice,34]| [e,Esther,32]|
+------------+--------------+--------------+
a
b
c
de
f
g
Alice, 34
Bob, 36
Charlie, 30
Fanny, 36
Esther, 32 David, 29
Gabby, 60
friend
friend
friend
follow
follow
follow
friend
/ 20
a
GraphFrames – 最短距離を計算
13
// すべてのユーザからユーザ “a” までの最短距離を計算
scala> val d1 = friends.shortestPaths.landmarks(Seq("a")).run()
// 結果を表示
scala> d1.show()
+---+-------+---+-----------+
| id| name|age| distances|
+---+-------+---+-----------+
| f| Fanny| 36| Map()|
| g| Gabby| 60| Map()|
| a| Alice| 34|Map(a -> 0)|
| b| Bob| 36| Map()|
| c|Charlie| 30| Map()|
| d| David| 29|Map(a -> 1)|
| e| Esther| 32|Map(a -> 2)|
+---+-------+---+-----------+
a
b
c
de
f
a -> 0
g
a -> 2 a -> 1
/ 20
a
c
GraphFrames – 最短距離を計算
14
// すべてのユーザからユーザ “a”, “c” までの最短距離を計算
scala> val d2 = friends.shortestPaths.landmarks(Seq("a", "c")).run()
// 結果を表示
scala> d2.show()
+---+-------+---+-------------------+
| id| name|age| distances|
+---+-------+---+-------------------+
| f| Fanny| 36| Map(c -> 1)|
| g| Gabby| 60| Map()|
| a| Alice| 34|Map(a -> 0, c -> 2)|
| b| Bob| 36| Map(c -> 1)|
| c|Charlie| 30| Map(c -> 0)|
| d| David| 29|Map(a -> 1, c -> 3)|
| e| Esther| 32|Map(a -> 2, c -> 2)|
+---+-------+---+-------------------+
a
b
c
de
f
g
a -> 0
c -> 2
a -> 2
c -> 2
a -> 1
c -> 3
c -> 0
c -> 1
c -> 1
/ 20
a
b
c
d
GraphFrames – 最短経路の探索
15
// ユーザ “d”から“c” への最短経路を探索
scala> val path = friends.bfs.fromExpr("id = 'd'").toExpr("id = 'c'").run()
// 結果を表示
scala> path.show()
+------------+------------+------------+
| from| e0| v1|
+------------+------------+------------+
|[d,David,29]|[d,a,friend]|[a,Alice,34]|
+------------+------------+------------+
+------------+----------+------------+--------------+
| e1| v2| e2| to|
+------------+----------+------------+--------------+
|[a,b,friend]|[b,Bob,36]|[b,c,follow]|[c,Charlie,30]|
+------------+----------+------------+--------------+
a
b
c
de
f
g
Alice, 34
Bob, 36
Charlie, 30
David, 29
friend
follow
friend
/ 20
GraphFrames – その他の機能
• GraphFrames User Guide
16
http://graphframes.github.io/user-guide.html
/ 20
GraphFrames – ユースケース
• On-Time Flight Performance with GraphFrames for Apache Spark
17
https://databricks.com/blog/2016/03/16/on-time-flight-performance-with-spark-graphframes.html
/ 20
GraphFrames vs. Neo4j
18
引用:http://www.slideshare.net/SparkSummit/graphframes-graph-queries-in-spark-sql-by-ankur-dave
/ 20
GraphFrames × Spark 2.0
19
引用: http://www.slideshare.net/databricks/2016-spark-summit-east-keynote-matei-zaharia
/ 20
GraphFramesまとめ
• 高レイヤの分散グラフ処理API
• 高い生産性
• 高速な分散グラフ処理
• 今月リリースされたばかり
• まだまだ機能や情報は少ない
• 今後の発展や活用に期待
20

More Related Content

Viewers also liked

Which Is Deeper - Comparison Of Deep Learning Frameworks On Spark
 Which Is Deeper - Comparison Of Deep Learning Frameworks On Spark Which Is Deeper - Comparison Of Deep Learning Frameworks On Spark
Which Is Deeper - Comparison Of Deep Learning Frameworks On SparkSpark Summit
 
Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Yoji Kiyota
 
Cloud OSの進化を考える
Cloud OSの進化を考えるCloud OSの進化を考える
Cloud OSの進化を考えるmaruyama097
 
JVM and OS Tuning for accelerating Spark application
JVM and OS Tuning for accelerating Spark applicationJVM and OS Tuning for accelerating Spark application
JVM and OS Tuning for accelerating Spark applicationTatsuhiro Chiba
 
Hadoop Conference Japan 2016 LT資料 グラフデータベース事始め
Hadoop Conference Japan 2016 LT資料 グラフデータベース事始めHadoop Conference Japan 2016 LT資料 グラフデータベース事始め
Hadoop Conference Japan 2016 LT資料 グラフデータベース事始めオラクルエンジニア通信
 
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望maruyama097
 
A Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on TezA Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on TezGw Liu
 
ContainerとName Space Isolation
ContainerとName Space IsolationContainerとName Space Isolation
ContainerとName Space Isolationmaruyama097
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習x1 ichi
 
大規模グラフデータ処理
大規模グラフデータ処理大規模グラフデータ処理
大規模グラフデータ処理maruyama097
 
Hadoop / Spark Conference Japan 2016 ご挨拶・Hadoopを取り巻く環境
Hadoop / Spark Conference Japan 2016 ご挨拶・Hadoopを取り巻く環境Hadoop / Spark Conference Japan 2016 ご挨拶・Hadoopを取り巻く環境
Hadoop / Spark Conference Japan 2016 ご挨拶・Hadoopを取り巻く環境Hadoop / Spark Conference Japan
 
Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)
Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)
Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)Hadoop / Spark Conference Japan
 
機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Papermaruyama097
 
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)Hadoop / Spark Conference Japan
 
Spark Meetup TensorFrames
Spark Meetup TensorFramesSpark Meetup TensorFrames
Spark Meetup TensorFramesJen Aman
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)NTT DATA OSS Professional Services
 
機械学習技術の現在
機械学習技術の現在機械学習技術の現在
機械学習技術の現在maruyama097
 
「HTML5」における動画DRMのゆくえとか
「HTML5」における動画DRMのゆくえとか「HTML5」における動画DRMのゆくえとか
「HTML5」における動画DRMのゆくえとかTeiichi Ota
 
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
SQL on Hadoop 比較検証 【2014月11日における検証レポート】SQL on Hadoop 比較検証 【2014月11日における検証レポート】
SQL on Hadoop 比較検証 【2014月11日における検証レポート】NTT DATA OSS Professional Services
 

Viewers also liked (20)

Which Is Deeper - Comparison Of Deep Learning Frameworks On Spark
 Which Is Deeper - Comparison Of Deep Learning Frameworks On Spark Which Is Deeper - Comparison Of Deep Learning Frameworks On Spark
Which Is Deeper - Comparison Of Deep Learning Frameworks On Spark
 
Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習
 
Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理
 
Cloud OSの進化を考える
Cloud OSの進化を考えるCloud OSの進化を考える
Cloud OSの進化を考える
 
JVM and OS Tuning for accelerating Spark application
JVM and OS Tuning for accelerating Spark applicationJVM and OS Tuning for accelerating Spark application
JVM and OS Tuning for accelerating Spark application
 
Hadoop Conference Japan 2016 LT資料 グラフデータベース事始め
Hadoop Conference Japan 2016 LT資料 グラフデータベース事始めHadoop Conference Japan 2016 LT資料 グラフデータベース事始め
Hadoop Conference Japan 2016 LT資料 グラフデータベース事始め
 
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望
 
A Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on TezA Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on Tez
 
ContainerとName Space Isolation
ContainerとName Space IsolationContainerとName Space Isolation
ContainerとName Space Isolation
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
 
大規模グラフデータ処理
大規模グラフデータ処理大規模グラフデータ処理
大規模グラフデータ処理
 
Hadoop / Spark Conference Japan 2016 ご挨拶・Hadoopを取り巻く環境
Hadoop / Spark Conference Japan 2016 ご挨拶・Hadoopを取り巻く環境Hadoop / Spark Conference Japan 2016 ご挨拶・Hadoopを取り巻く環境
Hadoop / Spark Conference Japan 2016 ご挨拶・Hadoopを取り巻く環境
 
Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)
Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)
Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)
 
機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper
 
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
 
Spark Meetup TensorFrames
Spark Meetup TensorFramesSpark Meetup TensorFrames
Spark Meetup TensorFrames
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
 
機械学習技術の現在
機械学習技術の現在機械学習技術の現在
機械学習技術の現在
 
「HTML5」における動画DRMのゆくえとか
「HTML5」における動画DRMのゆくえとか「HTML5」における動画DRMのゆくえとか
「HTML5」における動画DRMのゆくえとか
 
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
SQL on Hadoop 比較検証 【2014月11日における検証レポート】SQL on Hadoop 比較検証 【2014月11日における検証レポート】
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
 

Similar to Spark GraphFrames のススメ

Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoHideo Harada
 
Learning spaerk chapter03
Learning spaerk chapter03Learning spaerk chapter03
Learning spaerk chapter03Akimitsu Takagi
 
msgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphmsgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphyaegashi
 
Lambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べるLambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べるshotaueda3
 
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオンSageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオンtomohiro kato
 
分散グラフデータベース DataStax Enterprise Graph
分散グラフデータベース DataStax Enterprise Graph分散グラフデータベース DataStax Enterprise Graph
分散グラフデータベース DataStax Enterprise GraphYuki Morishita
 
MariaDB Meetup Tokyo 2019 #2
MariaDB Meetup Tokyo 2019 #2MariaDB Meetup Tokyo 2019 #2
MariaDB Meetup Tokyo 2019 #2GOTO Satoru
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう幹雄 小川
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best PracticeHadoop / Spark Conference Japan
 
SparkとCassandraの美味しい関係
SparkとCassandraの美味しい関係SparkとCassandraの美味しい関係
SparkとCassandraの美味しい関係datastaxjp
 
Spark on sql server?
Spark on sql server?Spark on sql server?
Spark on sql server?Oda Shinsuke
 
OSC2011 Tokyo/Spring Hadoop入門
OSC2011 Tokyo/Spring Hadoop入門OSC2011 Tokyo/Spring Hadoop入門
OSC2011 Tokyo/Spring Hadoop入門Shinichi YAMASHITA
 
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用Developers Summit
 
Apache tinkerpopとグラフデータベースの世界
Apache tinkerpopとグラフデータベースの世界Apache tinkerpopとグラフデータベースの世界
Apache tinkerpopとグラフデータベースの世界Yuki Morishita
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたNarami Kiyokura
 
Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Tanaka Yuichi
 
Sql server 2017 新機能のご紹介
Sql server 2017 新機能のご紹介Sql server 2017 新機能のご紹介
Sql server 2017 新機能のご紹介Oda Shinsuke
 

Similar to Spark GraphFrames のススメ (20)

Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 Hokkaido
 
Learning spaerk chapter03
Learning spaerk chapter03Learning spaerk chapter03
Learning spaerk chapter03
 
msgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphmsgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graph
 
Lambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べるLambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べる
 
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオンSageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
 
分散グラフデータベース DataStax Enterprise Graph
分散グラフデータベース DataStax Enterprise Graph分散グラフデータベース DataStax Enterprise Graph
分散グラフデータベース DataStax Enterprise Graph
 
MariaDB Meetup Tokyo 2019 #2
MariaDB Meetup Tokyo 2019 #2MariaDB Meetup Tokyo 2019 #2
MariaDB Meetup Tokyo 2019 #2
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
SASとHadoopとの連携 2015
SASとHadoopとの連携 2015SASとHadoopとの連携 2015
SASとHadoopとの連携 2015
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
 
SparkとCassandraの美味しい関係
SparkとCassandraの美味しい関係SparkとCassandraの美味しい関係
SparkとCassandraの美味しい関係
 
Spark on sql server?
Spark on sql server?Spark on sql server?
Spark on sql server?
 
OSC2011 Tokyo/Spring Hadoop入門
OSC2011 Tokyo/Spring Hadoop入門OSC2011 Tokyo/Spring Hadoop入門
OSC2011 Tokyo/Spring Hadoop入門
 
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
 
Apache tinkerpopとグラフデータベースの世界
Apache tinkerpopとグラフデータベースの世界Apache tinkerpopとグラフデータベースの世界
Apache tinkerpopとグラフデータベースの世界
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
 
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPANSAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
 
Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析
 
Sql server 2017 新機能のご紹介
Sql server 2017 新機能のご紹介Sql server 2017 新機能のご紹介
Sql server 2017 新機能のご紹介
 

Spark GraphFrames のススメ

  • 1. / 20 Spark GraphFrames のススメ ビッグデータ部 加嵜長門 2016年3月23日 道玄坂LT祭り
  • 2. / 20 自己紹介 • 加嵜 長門 • 2014年4月~ DMM.comラボ • Hadoop基盤構築 • Spark MLlib, GraphX, spark.ml, GraphFrames を用いたレコメンド開発 • 好きな言語 • SQL • Cypher 2
  • 3. / 20 GraphFramesとは? • GraphFrames • http://graphframes.github.io/ • 分散グラフ処理のための Apache Spark パッケージ • Spark GraphX と DataFrames (SparkSQL) の統合 • Databricksが2016年3月3日にリリース 3
  • 5. / 20 GraphFramesのメリット • 高レイヤのAPI • 数行の記述でグラフの分散処理が実現できる • グラフデータの構築が容易 • RDBやDataFramesなどのテーブル形式のデータから 手軽にグラフ構造のデータを作成できる • ブルーオーシャン! 5 https://www.google.co.jp/search?q=graphframes&ie=utf-8&oe=utf-8&hl=ja (2016.3.23現在)
  • 6. / 20 GraphFramesを試す • Sparkと同様、Scala, Java, Python, R向けのAPIを使用可能 • Spark Shell でインタラクティブに試す • Spark 1.4以上に対応 • DataFramesの利点を活かすなら最新版を推奨 6 # spark をダウンロード $ wget http://ftp.jaist.ac.jp/pub/apache/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz $ tar xzvf spark-1.6.0-bin-hadoop2.6.tgz # graphframesパッケージを指定してspark-shellを起動 $ spark-1.6.0-bin-hadoop2.6/bin/spark-shell --packages graphframes:graphframes:0.1.0-spark1.6
  • 7. / 20 GraphFrames – グラフの作成 7 // graphframesパッケージのインポート scala> import org.graphframes._ import org.graphframes._ // Vertex(頂点)となるDataFrameを作成 scala> val v = sqlContext.createDataFrame(List( | (0L, "user", "u1"), | (1L, "user", "u2"), | (2L, "item", "i1"), | (3L, "item", "i2"), | (4L, "item", "i3"), | (5L, "item", "i4") | )).toDF("id", "type", "name") v: org.apache.spark.sql.DataFrame = [id: bigint, type: string, name: string] u1 u2 ユーザ i1 i2 i3 i4 アイテム
  • 8. / 20 GraphFrames – グラフの作成 8 // Edge(辺)となるDataFrameを作成 scala> val e = sqlContext.createDataFrame(List( | (0L, 2L, "purchase"), | (0L, 3L, "purchase"), | (0L, 4L, "purchase"), | (1L, 3L, "purchase"), | (1L, 4L, "purchase"), | (1L, 5L, "purchase") | )).toDF("src", "dst", "type") e: org.apache.spark.sql.DataFrame = [src: bigint, dst: bigint, type: string] // GraphFrameを作成 scala> val g = GraphFrame(v, e) g: org.graphframes.GraphFrame = GraphFrame(v:[id: bigint, attr: string, gender: string], e:[src: bigint, dst: bigint, relationship: string]) u1 u2 i1 i2 i3 i4 購入ログ
  • 9. / 20 GraphFrames – アイテムレコメンドの実行例 9 // レコメンドアイテムの問い合わせ例 scala> g.find( | " (a)-[]->(x); (b)-[]->(x);" + | " (b)-[]->(y); !(a)-[]->(y)" | ).groupBy( | "a.name", "y.name" | ).count().show() +----+----+-----+ |name|name|count| +----+----+-----+ | u1| i4| 2| | u2| i1| 2| +----+----+-----+ u1 u2 i1 i2 i3 i4 共通の商品を 購入したユーザ まだ購入していないアイテムをレコメンド (b) (y) (a) (x)
  • 10. / 20 GraphFrames – サンプルグラフの利用 (1) 10 // スターグラフを作成 scala> val star = examples.Graphs.star(5) // Tripletsを表示 scala> star.triplets.show() +------------+----------+--------+ | edge| src| dst| +------------+----------+--------+ |[1,0,edge-1]|[1,node-1]|[0,root]| |[2,0,edge-2]|[2,node-2]|[0,root]| |[3,0,edge-3]|[3,node-3]|[0,root]| |[4,0,edge-4]|[4,node-4]|[0,root]| |[5,0,edge-5]|[5,node-5]|[0,root]| +------------+----------+--------+ 0 1 2 3 4 5 node-1 node-2 node-3 node-4 node-5 root edge-1 edge-2 edge-3 edge-4 edge-5
  • 11. / 20 GraphFrames – PageRankの実行例 11 // PageRankを計算 scala> val pr = g.pageRank.resetProbability(0.1).tol(0.01).run() // PageRankのスコアを表示 scala> pr.vertices.show() +---+-------+--------+ | id|v_attr1|pagerank| +---+-------+--------+ | 0| root| 0.55| | 1| node-1| 0.1| | 2| node-2| 0.1| | 3| node-3| 0.1| | 4| node-4| 0.1| | 5| node-5| 0.1| +---+-------+--------+ 0 1 2 3 4 5 0.1 0.1 0.1 0.1 0.1 0.55
  • 12. / 20 GraphFrames – サンプルグラフの利用 (2) 12 // 友達関係のサンプルグラフを作成 scala> val friends = examples.Graphs.friends // Tripletsを表示 scala> friends.triplets.show() +------------+--------------+--------------+ | edge| src| dst| +------------+--------------+--------------+ |[a,b,friend]| [a,Alice,34]| [b,Bob,36]| |[b,c,follow]| [b,Bob,36]|[c,Charlie,30]| |[c,b,follow]|[c,Charlie,30]| [b,Bob,36]| |[f,c,follow]| [f,Fanny,36]|[c,Charlie,30]| |[e,f,follow]| [e,Esther,32]| [f,Fanny,36]| |[e,d,friend]| [e,Esther,32]| [d,David,29]| |[d,a,friend]| [d,David,29]| [a,Alice,34]| |[a,e,friend]| [a,Alice,34]| [e,Esther,32]| +------------+--------------+--------------+ a b c de f g Alice, 34 Bob, 36 Charlie, 30 Fanny, 36 Esther, 32 David, 29 Gabby, 60 friend friend friend follow follow follow friend
  • 13. / 20 a GraphFrames – 最短距離を計算 13 // すべてのユーザからユーザ “a” までの最短距離を計算 scala> val d1 = friends.shortestPaths.landmarks(Seq("a")).run() // 結果を表示 scala> d1.show() +---+-------+---+-----------+ | id| name|age| distances| +---+-------+---+-----------+ | f| Fanny| 36| Map()| | g| Gabby| 60| Map()| | a| Alice| 34|Map(a -> 0)| | b| Bob| 36| Map()| | c|Charlie| 30| Map()| | d| David| 29|Map(a -> 1)| | e| Esther| 32|Map(a -> 2)| +---+-------+---+-----------+ a b c de f a -> 0 g a -> 2 a -> 1
  • 14. / 20 a c GraphFrames – 最短距離を計算 14 // すべてのユーザからユーザ “a”, “c” までの最短距離を計算 scala> val d2 = friends.shortestPaths.landmarks(Seq("a", "c")).run() // 結果を表示 scala> d2.show() +---+-------+---+-------------------+ | id| name|age| distances| +---+-------+---+-------------------+ | f| Fanny| 36| Map(c -> 1)| | g| Gabby| 60| Map()| | a| Alice| 34|Map(a -> 0, c -> 2)| | b| Bob| 36| Map(c -> 1)| | c|Charlie| 30| Map(c -> 0)| | d| David| 29|Map(a -> 1, c -> 3)| | e| Esther| 32|Map(a -> 2, c -> 2)| +---+-------+---+-------------------+ a b c de f g a -> 0 c -> 2 a -> 2 c -> 2 a -> 1 c -> 3 c -> 0 c -> 1 c -> 1
  • 15. / 20 a b c d GraphFrames – 最短経路の探索 15 // ユーザ “d”から“c” への最短経路を探索 scala> val path = friends.bfs.fromExpr("id = 'd'").toExpr("id = 'c'").run() // 結果を表示 scala> path.show() +------------+------------+------------+ | from| e0| v1| +------------+------------+------------+ |[d,David,29]|[d,a,friend]|[a,Alice,34]| +------------+------------+------------+ +------------+----------+------------+--------------+ | e1| v2| e2| to| +------------+----------+------------+--------------+ |[a,b,friend]|[b,Bob,36]|[b,c,follow]|[c,Charlie,30]| +------------+----------+------------+--------------+ a b c de f g Alice, 34 Bob, 36 Charlie, 30 David, 29 friend follow friend
  • 16. / 20 GraphFrames – その他の機能 • GraphFrames User Guide 16 http://graphframes.github.io/user-guide.html
  • 17. / 20 GraphFrames – ユースケース • On-Time Flight Performance with GraphFrames for Apache Spark 17 https://databricks.com/blog/2016/03/16/on-time-flight-performance-with-spark-graphframes.html
  • 18. / 20 GraphFrames vs. Neo4j 18 引用:http://www.slideshare.net/SparkSummit/graphframes-graph-queries-in-spark-sql-by-ankur-dave
  • 19. / 20 GraphFrames × Spark 2.0 19 引用: http://www.slideshare.net/databricks/2016-spark-summit-east-keynote-matei-zaharia
  • 20. / 20 GraphFramesまとめ • 高レイヤの分散グラフ処理API • 高い生産性 • 高速な分散グラフ処理 • 今月リリースされたばかり • まだまだ機能や情報は少ない • 今後の発展や活用に期待 20