sparkrをつかってみた(japan.r)

17
SparkRを使ってみた ただそれだけ

Upload: johnsmith

Post on 13-Jul-2015

1.251 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: SparkRをつかってみた(Japan.R)

SparkRを使ってみたただそれだけ

Page 2: SparkRをつかってみた(Japan.R)

自己紹介

@__john_smith__ (じょんすみす)

どこにでもいる普通のアル中なぜかTwitterでビアドベントカレンダーを一人でやってる

※ビアドベントカレンダーとはアドベントカレンダーの要領で毎日ビールを紹介紹介するビールは必ずその日飲むこと

Page 3: SparkRをつかってみた(Japan.R)

SparkRってなんぞ?

SparkをRから操作するためのもの

Sparkってなんぞ?って話はしません

Rってなんぞ?って話は必要ありません

Page 4: SparkRをつかってみた(Japan.R)

ただし書き

今回は本当にただ使ってみただけです

まじでサンプル実行した程度です

localで動かしているので分散しません

分散しないのでRのライブラリと速度比較で来ません

分散しないのでin-memoryでも使えるデータサイズはRと多分変わりません

Page 5: SparkRをつかってみた(Japan.R)

やってみたこと

Word Count

Hadoopのせいで最初にやってみることの代表格になった

分散処理界のHallo, World的な存在

SparkのREADME.md

Spark界隈ではなぜかチュートリアルで扱うファイルはこいつ

Page 6: SparkRをつかってみた(Japan.R)

まずは

普通にSparkで

$ ./bin/spark-shell

scala> val textFile = sc.textFile(“README.md”)

scala> val fm = textFile.flatMap(_.split(“ “))

scala> val m = fm.map((_, 1))

scala> val rk = m.reduceByKey(_ + _)

scala> rk.collect()

Page 7: SparkRをつかってみた(Japan.R)

まずは

普通にSparkで

$ ./bin/spark-shell

scala> val textFile = sc.textFile(“README.md”)

scala> val fm = textFile.flatMap(_.split(“ “))

scala> val m = fm.map((_, 1))

scala> val rk = m.reduceByKey(_ + _)

scala> rk.collect()

ね?簡単でしょ?

Page 8: SparkRをつかってみた(Japan.R)

Rでやる

SparkRのインストール

# この辺入ってなければ入れる

install.packages("rJava")

install.packages("devtools")

library(devtools)

# githubから持ってくる

install_github("amplab-extras/SparkR-pkg", subdir="pkg”)

Page 9: SparkRをつかってみた(Japan.R)

Rでやる

読み込み

library(SparkR)

sc <- sparkR.init(“local”)

lines <- textFile(sc, “README.md”)

Page 10: SparkRをつかってみた(Japan.R)

Rでやる

単語で区切る

library(SparkR)

sc <- sparkR.init(“local”)

lines <- textFile(sc, “README.md”)

words <- flatMap(function(line) { strsplit(line, “ “)[[1]] })

Page 11: SparkRをつかってみた(Japan.R)

Rでやる

各単語の出現回数に1を入れる

library(SparkR)

sc <- sparkR.init(“local”)

lines <- textFile(sc, “README.md”)

words <- flatMap(function(line) { strsplit(line, “ “)[[1]] })

wordCount <- lapply(words, function(word) { list(word, 1) }

Page 12: SparkRをつかってみた(Japan.R)

Rでやる

合計して出現回数を求める

library(SparkR)

sc <- sparkR.init(“local”)

lines <- textFile(sc, “README.md”)

words <- flatMap(function(line) { strsplit(line, “ “)[[1]] })

wordCount <- lapply(words, function(word) { list(word, 1) }

count <- reduceByKey(wordCount, “+”, 2L)

Page 13: SparkRをつかってみた(Japan.R)

Rでやる

出力

library(SparkR)

sc <- sparkR.init(“local”)

lines <- textFile(sc, “README.md”)

words <- flatMap(function(line) { strsplit(line, “ “)[[1]] })

wordCount <- lapply(words, function(word) { list(word, 1) }

count <- reduceByKey(wordCount, “+”, 2L)

output <- collect(count)

for (item in output) {

cat(item[[1]], “ \t“ item[[2]], “\n”)

}

Page 14: SparkRをつかってみた(Japan.R)

Rでやる

出力

library(SparkR)

sc <- sparkR.init(“local”)

lines <- textFile(sc, “README.md”)

words <- flatMap(function(line) { strsplit(line, “ “)[[1]] })

wordCount <- lapply(words, function(word) { list(word, 1) }

count <- reduceByKey(wordCount, “+”, 2L)

output <- collect(count)

for (item in output) {

cat(item[[1]], “ \t“ item[[2]], “\n”)

}

ね?簡単でしょ?

Page 15: SparkRをつかってみた(Japan.R)

対応関係

Spark R

sc.textFile textFile

flatMap flatMap

map lapply

reduceByKey reduceByKey

ほぼほぼ同じ関数がそのまま使える

具体的な処理はRで書ける

words <- flatMap(function(line) { strsplit(line, “ “)[[1]] })

Page 16: SparkRをつかってみた(Japan.R)

でも...

そのままRの変数としては使えないっぽいです

RDDオブジェクト

irisをRDDにしてRのlm関数とか使えなかった ...

Page 17: SparkRをつかってみた(Japan.R)

結論

今後に期待