RStudio + sparklyr on EMRでスケーラブル機械学習
前回に引き続き分析環境ネタ第2弾*1.今回はEMRでRStudioを立ててみます.
RStudioの構築
やり方自体は,AWS Big Data Blogにまとまっているので,別に難しくはなかったり.RStudioとか関連コンポーネントは,例のごとくS3に便利スクリプトがあるので,これをブートストラップで読み込んであげればOK.
s3://aws-bigdata-blog/artifacts/aws-blog-emr-rstudio-sparklyr/rstudio_sparklyr_emr5.sh --sparklyr --rstudio --sparkr --rexamples --plyrmr
あとはSSHトンネルを掘って,RStudioのWebページにつないであげればOK.8787ポートでつながります.
sparklyrでSparkと連携
sparklyrは,RStudioの人たちが作っている,RからSparkを扱うためのパッケージになります.ちょうどタイムリーにyamano357さんが,sparklyrの記事をあげていたりしますね*2.
基本的にリファレンスページが非常にまとまっているので,それを読むだけで一通りの操作ができますが,とりあえず自分でも試してみましょう.sparklyrは read_from_csv() を使ってS3から直接ファイルを読み込むことができます.便利ですね.試してはいないのですが,以下のパッケージを併せて使えば,RでRedshiftからもSparkにデータを読み出せるっぽいです.
あとは,リファレンスに従って,定番処理を試してみましょう.読み込むデータは前回と一緒のabaloneです.
library(sparklyr) library(dplyr) # create Spark Context sc <- spark_connect(master = "yarn-client", version = "2.0.2") # create dataset in Spark abalone <- spark_read_csv(sc, "abalone", path="s3://XXXXXXXX/abalone.csv") names(abalone) = c("sex", "length", "diameter", "height", "whole_height", "shucked_height", "viscera_height", "shell_height", "rings") head(abalone) tbl_cache(sc, "abalone") # execute query abalone %>% dplyr::group_by(sex) %>% dplyr::count() # separate dataset partitions <- abalone %>% sdf_partition(training = 0.9, test = 0.1, seed = 123) # execute regression model fit <- partitions$training %>% ml_linear_regression( response = "rings", features = c("sex", "length", "diameter", "height", "whole_height", "shucked_height", "viscera_height", "shell_height") ) summary(fit) original_value <- partitions$test %>% dplyr::select(rings) predicted_value <- predict(fit, partitions$test)
ということで,慣れると非常に簡単に処理できますね.すばらしい.Sparklyrはチートシートもあるので,慣れるのも割とすぐな感じです.これをみる感じ,ビジュアライズはさすがにRのメモリ側にデータを持ってこないとダメみたいですね.あとは,ML Pipelineの各Transformerに対応するメソッドが揃っていたり,かなり力入れて開発されてるなぁ感がすごいですね.
所感
と,ささっと触って思ったのは,同じことやるならZeppelinで直接DataFrameいじったほうが早い気がするなぁということでした.結局sparklyrでできるのは,RのインタフェースでML Pipelineを扱えるというだけのことで,ロジック自体は実質的にML Pipelineを知らないと書けないし,結果の可視化もZeppelinで十分に対応可能です.
その上で,じゃあどういう使い方をすると良いかなぁと考えると,やっぱりRを使うメリットは高速なプロトタイピングってところに尽きるのかなぁと思ったり.つまり,大規模なデータを前処理して,Rの機械学習モデルに落とし込んでいろいろ試行錯誤する,という使い方かなぁと.なので,有賀さんが前にibisの話ししてたのと同じイメージで使うと,色々捗りそうな気がしています.
www.slideshare.net
2017/1/31追記
sparklyr0.5に合わせて,公式ページに Deploying sparklyr という形で基本的なセットアップと使い方がまとめられてます.そのサンプル読んでると,実は ml_linear_regression() とか x ~ y のR式の記述ができたということに気がつきました.便利だ...