Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Rで大規模解析   aa          Tokyo.R #16           和田 計也サイバー系            CyberAgent, Inc.
サイバー系     アジェンダ     1.      自己紹介     2.      SAS 9.3が出た     3.      Rをビルドしてみる(高速化できたらいいな)     4.      大規模データを取得してみる     5....
サイバー系     いまここ     1.      自己紹介     2.      SAS 9.3が出た     3.      Rをビルドしてみる(高速化できたらいいな)     4.      大規模データを取得してみる     5. ...
サイバー系     1.自己紹介  • 和田 計也(@wdkz)         •   静岡県袋井市出身  • サイバー系企業でデータマイニングエンジニア職         •   創立記念日が3月18日         •   社長の出身地...
サイバー系     いまここ     1.      自己紹介     2.      SAS 9.3が出た     3.      Rをビルドしてみる(高速化できたらいいな)     4.      大規模データを取得してみる     5. ...
サイバー系     2 SAS 9.3(通称SAS美)が出た.SAS美                    という記事が出たが、実際のところ変更点はそこじゃなさげ         ↓主な変更点はこんな感じ             •   HT...
サイバー系     いまここ     1.      自己紹介     2.      SAS 9.3が出た     3.      Rをビルドしてみる(高速化できたらいいな)     4.      大規模データを取得してみる     5. ...
サイバー系     3.1 Rのビルド     •       Windows 64bit OSでやってみる              • 案外Windows でのビルド方法って                ドキュメントないのね…2011/0...
サイバー系     3.2 (参考)LinuxでRをコンパイル スコードからコンパイルする・Linux     Linux(CentOS 5)用のRをソースコードからコンパイルする方法。        X11とCairo関係をあらかじめインスト...
サイバー系      3.3 Rのソースコードをダウンロードースコードからコンパイルする・Win  •     例えば http://cran.md.tsukuba.ac.jp/  •     適当なフォルダ(C:¥tools¥R¥R-2.13...
サイバー系     3.4 ビルドツールをダウンロードコンパイルする・Win     RtoolsをDL     http://www.murdoch-sutherland.com/Rtools/                        ...
サイバー系     3.5 ビルドツール(Rtools)をインストール                                   64bit版のTcl/Tkを選択      ★これ大事★ Rのソースを解凍した      フォルダを指定...
サイバー系     3.6 ビルド準備     •    (たぶんRtoolsのインストール時に設定されてるはずだけど)         Rtools¥binとRtools¥minGW64¥binをパスに追加する。          例えばC:...
サイバー系     3.7 ビルド準備・続き     •       ビルド設定ファイルの編集             • R-2.13.1¥src¥gnuwin32¥MkRules.distを同一フォルダにコピペして             ...
サイバー系     3.8 完成させる     •       最後・コマンドプロンプトで             cd C:¥tools¥R¥R-2.13.1¥src¥gnuwin32             make all recomme...
サイバー系     3.9 バイトコンパイルする(とRが速くなるという噂)     •       MkRules.localを編集(以下の2行を追加)             •   R_COMPILE_PKGS=1             ...
サイバー系     3.10 やったね!     2011年10月登場予定のR次期バージョンは、コンパイル済でやってきます!2011/08/27                                   16
サイバー系     3.11 BLASライブラリとしてGotoBLASを使う(とRが速くなるという噂)える     http://prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/      GotoBLASはメンテ...
サイバー系     3.12 やる夫の憂鬱         ____        /      \       / ⌒     ⌒\     /   (●) (●) \    ホントはMKLを使うようにビルドしたかったお     |    (...
サイバー系     3.13 RevolutionR Community Edition     •       無料で利用可能です。             • http://www.revolutionanalytics.com/produ...
サイバー系     いまここ     1.      自己紹介     2.      SAS 9.3が出た     3.      Rをビルドしてみる(高速化できたらいいな)     4.      大規模データを取得してみる     5. ...
サイバー系        4.1 Hadoopクラスタの概念図    •        データストアとしてHadoopを利用していることが多             いかと思います。    •        RHIPE使うとか         ...
サイバー系     4.2 Hiveいいね!     •       Map-Reduce書いてもいいけど、書きたくない     •       HiveQLならSQL likeな記述でデータ扱える             (勝手にMap-Re...
サイバー系     4.3 RでhiveQLが使えるといいなぁ             •       理想はRODBC             library(RODBC)             conn <- odbcConnect(“t...
サイバー系     4.4 rJavaの使い方1(基本編)     #あらかじめJavaはインストールしておく     install.packages(rjava) #rJavaのインストール     library(rJava)     ....
サイバー系     4.4 rJavaの使い方2(ちょっとマニアック編)     #クラスパス指定&起動オプション付きでJVMの起動     .jinit(classpath=c(“C:¥¥tokyor¥¥Tokyor.jar”), param...
サイバー系     4.5 自作クラスを適当に作成                                                                                               Hi...
サイバー系     4.6 HiveのJDBCは0.7.1じゃなくて開発版の0.8.0を使う         v 0.7.1(現行版)                v 0.8.0-SNAPSHOT(開発版)            <<inte...
サイバー系     4.7 Rhiveを使ってみる     •       hive-jdbc.jarを使うのに必要なjarファイル群*にクラスパスを設定して     •       Thrift Serverをサーバ側で起動しておいて    ...
サイバー系     4.8 rJavaは困った子(ちょっと注意)     •       メモリを解放してくれない             •   rm(list=ls()); gc()しても             •   Javaで明示的に...
サイバー系     いまここ     1.      自己紹介     2.      SAS 9.3が出た     3.      Rをビルドしてみる(高速化できたらいいな)     4.      大規模データを取得してみる     5. ...
サイバー系     5.1 Rで大規模データを扱いたい     •       Rの弱点              • データは基本的にオンメモリ     •       大規模データ管理パッケージ              • bigmemo...
サイバー系     5.2 Rのbigmemoryパッケージ     install.packages(bigmemory);     library(bigmemory)     #Rの行列からbigmemoryへ #あまり使わない     ...
サイバー系     5.3 Rのbigmemoryパッケージ 2                                                                            データの実態はこのファイル ...
サイバー系     5.4 Rhiveから直接bigmemoryへ     •       RHiveで取得するデータって普通はgigabyte越えだから、直接bigmemory化             されるといいね!!でも問題がちらほら…...
サイバー系     5.5 ちなみにRのhashパッケージが結構便利     install.packages(hash)                    Javaなんかでよ                                ...
サイバー系     いまここ     1.      自己紹介     2.      SAS美の近況     3.      Rをビルドしてみる(高速化できたらいいな)     4.      大規模データを取得してみる     5.    ...
サイバー系     6.1 処理の高速化     •       並列処理して高速化してみる              •   Rは基本シングルコアでしか計算しない。              •   とはいえ、大規模データ扱うなら(しかもコア...
サイバー系     6.2 Revolution R Enterprise Editionがなかなかいいかも     http://www.revolutionanalytics.com/why-revolution-r/which-r-is-...
サイバー系     6.3 Revolution R Enterprise Edition     •       $1,000/year/user     •       HPCクラスタだといくらかわかんない2011/08/27       ...
サイバー系     いまここ     1.      自己紹介     2.      SAS美の近況     3.      Rをビルドしてみる(高速化できたらいいな)     4.      大規模データを取得してみる     5.    ...
サイバー系     7. 本日のハイライト     1.       自己紹介             @wdkzはサイバー系     2.       SAS 9.3出たよ             SAS 9.3出たけど…     3.   ...
Upcoming SlideShare
Loading in …5
×

Tokyo.R#16 wdkz

9,039 views

Published on

Rで大規模解析

ソースコードからのコンパイルとか
rJavaの使い方とか
Hiveとか

Published in: Technology
  • Be the first to comment

Tokyo.R#16 wdkz

  1. 1. Rで大規模解析 aa Tokyo.R #16 和田 計也サイバー系 CyberAgent, Inc.
  2. 2. サイバー系 アジェンダ 1. 自己紹介 2. SAS 9.3が出た 3. Rをビルドしてみる(高速化できたらいいな) 4. 大規模データを取得してみる 5. 大規模データを扱ってみる 6. 処理の高速化をしてみる 7. 本日のハイライト2011/08/27 1
  3. 3. サイバー系 いまここ 1. 自己紹介 2. SAS 9.3が出た 3. Rをビルドしてみる(高速化できたらいいな) 4. 大規模データを取得してみる 5. 大規模データを扱ってみる 6. 処理の高速化をしてみる 7. 本日のハイライト2011/08/27 2
  4. 4. サイバー系 1.自己紹介 • 和田 計也(@wdkz) • 静岡県袋井市出身 • サイバー系企業でデータマイニングエンジニア職 • 創立記念日が3月18日 • 社長の出身地が福井県鯖江市 • 前職はバイオベンチャー • バイオマーカ探索してた • 学生時代は枯草菌の研究2011/08/27 3
  5. 5. サイバー系 いまここ 1. 自己紹介 2. SAS 9.3が出た 3. Rをビルドしてみる(高速化できたらいいな) 4. 大規模データを取得してみる 5. 大規模データを扱ってみる 6. 処理の高速化をしてみる 7. 本日のハイライト2011/08/27 4
  6. 6. サイバー系 2 SAS 9.3(通称SAS美)が出た.SAS美 という記事が出たが、実際のところ変更点はそこじゃなさげ ↓主な変更点はこんな感じ • HTML形式が標準の出力になった! • 新しいプロシージャー(Rでいうpackageみたいなの)がいくつかできた! • IMLプロシージャー使ってR呼び出せる! • GROOVYも使える! • その他!2011/08/27 5
  7. 7. サイバー系 いまここ 1. 自己紹介 2. SAS 9.3が出た 3. Rをビルドしてみる(高速化できたらいいな) 4. 大規模データを取得してみる 5. 大規模データを扱ってみる 6. 処理の高速化をしてみる 7. 本日のハイライト2011/08/27 6
  8. 8. サイバー系 3.1 Rのビルド • Windows 64bit OSでやってみる • 案外Windows でのビルド方法って ドキュメントないのね…2011/08/27 7
  9. 9. サイバー系 3.2 (参考)LinuxでRをコンパイル スコードからコンパイルする・Linux Linux(CentOS 5)用のRをソースコードからコンパイルする方法。 X11とCairo関係をあらかじめインストールしておく。(しておかないとX関連が インストールできなくてエラー吐くよ。) yum groupinstall "X Window System" yum groupinstall "X Software Development" yum install cairo-devel wget http://cran.md.tsukuba.ac.jp/src/base/R-2/R-2.13.1.tar.gz tar –xvf R-2.13.1.tar.gz cd R-2.13.1 ./configure make sudo make install X関連でエラーがとまらないときは仕方ないので ./configure --with-x=no make sudo make install2011/08/27 8
  10. 10. サイバー系 3.3 Rのソースコードをダウンロードースコードからコンパイルする・Win • 例えば http://cran.md.tsukuba.ac.jp/ • 適当なフォルダ(C:¥tools¥R¥R-2.13.1.tar.gzとか)に置いて展開しておく2011/08/27 9
  11. 11. サイバー系 3.4 ビルドツールをダウンロードコンパイルする・Win RtoolsをDL http://www.murdoch-sutherland.com/Rtools/ http://cran.md.tsukuba.ac.jp/ これ2011/08/27 10
  12. 12. サイバー系 3.5 ビルドツール(Rtools)をインストール 64bit版のTcl/Tkを選択 ★これ大事★ Rのソースを解凍した フォルダを指定。例えばC:¥tools¥R にR-2.13.1.tar.gzを置いて解凍した 場合はC:¥tools¥R¥R-2.13.1となる。 ここ間違うとビルド失敗します。2011/08/27 11
  13. 13. サイバー系 3.6 ビルド準備 • (たぶんRtoolsのインストール時に設定されてるはずだけど) Rtools¥binとRtools¥minGW64¥binをパスに追加する。 例えばC:¥tools¥Rtools¥bin;C:¥tools¥Rtools¥MinGW64¥bin • 必要ライブラリの準備 • 以下のlibpng, jpeg and libtiff sourcesをダウンロード http://www.libpng.org/ http://www.ijg.org/ ftp://ftp.remotesensing.org/pub/libtiff/ • 解凍してR-2.13.1¥src¥gnuwin32¥bitmapに置く tar -zxf libpng-1.4.5.tar.gz mv libpng-1.4.5 libpng tar -zxf jpegsrc.v8c.tar.gz tar -zxf tiff-3.9.4.tar.gz mv tiff-3.9.4/libtiff . rm -rf tiff-3.9.42011/08/27 12
  14. 14. サイバー系 3.7 ビルド準備・続き • ビルド設定ファイルの編集 • R-2.13.1¥src¥gnuwin32¥MkRules.distを同一フォルダにコピペして MkRules.localと名付ける。 • 以下、このMkRules.localを編集 #JPEGDIR = jpeg-8c #PNGDIR = libpng #TIFFDIR = libtiff ↑3つのコメントアウトを外す WIN = 64 ↑32を64に変更 TMPDIR=C:¥DMZ ↑環境変数TMPDIRを作成して適当な場所(存在してればどこでも可)を設定 • ビルド時に、MkRules.local + MkRules.rulesがマージされてMkRulesという ファイルが自動的に生成され、それを基にビルドしていく。2011/08/27 13
  15. 15. サイバー系 3.8 完成させる • 最後・コマンドプロンプトで cd C:¥tools¥R¥R-2.13.1¥src¥gnuwin32 make all recommended Windowsの場合はここまで行ってね • バイナリ C:¥tools¥R¥R-2.13.1¥binフォルダ内によく見慣れた一式ができる。2011/08/27 14
  16. 16. サイバー系 3.9 バイトコンパイルする(とRが速くなるという噂) • MkRules.localを編集(以下の2行を追加) • R_COMPILE_PKGS=1 • R_COMPILER_SUPPRESS_ALL=1 • コマンドプロンプトで • make bytecode • ちなみに、普通のRでも関数単位でバイトコンパイルできます。 library(compiler) f <- cmpfun(<関数名>)2011/08/27 15
  17. 17. サイバー系 3.10 やったね! 2011年10月登場予定のR次期バージョンは、コンパイル済でやってきます!2011/08/27 16
  18. 18. サイバー系 3.11 BLASライブラリとしてGotoBLASを使う(とRが速くなるという噂)える http://prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/ GotoBLASはメンテ・開発が終了してるので ここから、生きてるGotoBLASをダウンロード 自分のマシンのCPUに 合ったものをダウンロード binフォルダ内(64bitならx64内)の Rblas.dllファイルを置き換える2011/08/27 17
  19. 19. サイバー系 3.12 やる夫の憂鬱 ____ / \ / ⌒ ⌒\ / (●) (●) \ ホントはMKLを使うようにビルドしたかったお | (__人__) | 誰かやりかたわかったら教えてお / ∩ノ ⊃ / ( \ / _ノ | | .\ “ /__| | \ /___ /2011/08/27 18
  20. 20. サイバー系 3.13 RevolutionR Community Edition • 無料で利用可能です。 • http://www.revolutionanalytics.com/products/revolution-r.php • 普通のRと同じように使えます。(アイコンが違うぐらい) • BLASライブラリ,LAPACKライブラリがMKLのです!!2011/08/27 19
  21. 21. サイバー系 いまここ 1. 自己紹介 2. SAS 9.3が出た 3. Rをビルドしてみる(高速化できたらいいな) 4. 大規模データを取得してみる 5. 大規模データを扱ってみる 6. 処理の高速化をしてみる 7. 本日のハイライト2011/08/27 20
  22. 22. サイバー系 4.1 Hadoopクラスタの概念図 • データストアとしてHadoopを利用していることが多 いかと思います。 • RHIPE使うとか • 第14回R勉強会@東京(Tokyo.R#14)で『R が黄色い象に出会った • http://ml.stat.purdue.edu/rhipe/2011/08/27 21
  23. 23. サイバー系 4.2 Hiveいいね! • Map-Reduce書いてもいいけど、書きたくない • HiveQLならSQL likeな記述でデータ扱える (勝手にMap-Reduceに変換してくれる) • https://cwiki.apache.org/confluence/display/Hive/Home • サイバーエージェントさんのようにClouderaのパッケージを導入しているな らHiveも使えるね • http://www.slideshare.net/toutouzone/hadoop-conferencejapan20112011/08/27 22
  24. 24. サイバー系 4.3 RでhiveQLが使えるといいなぁ • 理想はRODBC library(RODBC) conn <- odbcConnect(“testdb”, “tokyor”, “yokkuns”) #繋いで x <- sqlQuery(conn, “select * from ameba_tbl”) #取得して odbcClose(conn) #切断する R rJava Java JDBC (自前クラス) Hive こんな感じのRHive欲しい Hadoop2011/08/27 23
  25. 25. サイバー系 4.4 rJavaの使い方1(基本編) #あらかじめJavaはインストールしておく install.packages(rjava) #rJavaのインストール library(rJava) .jinit() #JVMの起動 クラス名 コンストラクタの引数 #インスタンス化 .jnew(“java/lang/String”, “Hello World!”) # String s = new String(“Hello World!”); s <- .jnew(“java/lang/String”, “Hello World!”) インスタンス名 メソッド名(括弧なし) #メソッド #s.length() .jcall(s, “I”, “length”) .jcall(s, ”I”, “length”) [1] 12 戻り値の型 #文字列は注意 I ; integer D ; double (numeric) J ; long F ; float print(s) V ; void Z ; boolean C ; char (integer) B ; byte (raw) [1] "Java-Object: Hello World“ #こうやって取り出す .jstrVal(s) [1] "Hello World"2011/08/27 24
  26. 26. サイバー系 4.4 rJavaの使い方2(ちょっとマニアック編) #クラスパス指定&起動オプション付きでJVMの起動 .jinit(classpath=c(“C:¥¥tokyor¥¥Tokyor.jar”), parameters=c(”-Xms4g”, “-Xmx4g”)) #クラス変数, クラスメソッド #Math.pi with(J("java.lang.Math"), pi) #System.gc() with(J("java.lang.System"), gc()) #インスタンス化 実際はパッケージ名から書いてね # TokyoR tokyoR = new TokyoR(); *ちなみに配列の場合は tokyo.r <- .jnew(“Tokyo.R”) [+型 数値はすべてdouble型で渡されるので [I intの配列 Int型を明示して渡す [S Stringの配列 #メソッド #tokyoR.setNumber(16) [[I intの2次元配列 .jcall(tokyor “V”, “setNumber”, as.integer(16)) Javaの配列をRで使うには .jevalArray(x)で変換が必要 #tokyoR.getNumber() .jcall(tokyor, “I”, “getNumber”) L + クラス名 + ; Rの配列をJavaに渡すには [1] 16 とする .jarray(1:10) #戻り値がクラスの場合 .jcall(tokyor “Ljava/util/ArrayList;”, “getPersonList”) これは何故かint型になる2011/08/27 25
  27. 27. サイバー系 4.5 自作クラスを適当に作成 HiveConnector • こんな感じのJavaクラスを作って→ - conn : Connection • Rで関数定義 + init : void + connect2Hive ( server: String): void hiveConnect <- function(server, port=10000){ + hiveQuery(sql: String) : ArrayList<int[]> library(rJava) + closeConn: void + getHeader : int[] .jinit() connStr <- .jnew(“java/lang/String”, (paste(“jdbc:hive://”, server, “:”, port, “/default”, sep=“”))) hiveConn <- .jnew("jp/ameba/rhive/HiveConnector") .jcall(hiveConn, , "connect2Hive", connStr) return(hiveConn) } hiveqlQuery <- function(hiveConn, query){ header <- .jcall(hiveConn, “[S”, “getHeader”) res.list <- as.list(.jcall(hiveConn, “Ljava/util/ArrayList;","hiveQuery",.jnew("java/lang/String", query))) res.matrix<- matrix(unlist(lapply(res.list, function(x){strsplit(.jevalArray(x),",")})) , ncol=length(header), byrow=TRUE) return(res.matrix) 注!!実際にはこのまま } 使うとメモリが足りなくて 爆死します。 hiveClose <- function(hiveConn){ .jcall(hiveConn, "V", "closeHive") }2011/08/27 26
  28. 28. サイバー系 4.6 HiveのJDBCは0.7.1じゃなくて開発版の0.8.0を使う v 0.7.1(現行版) v 0.8.0-SNAPSHOT(開発版) <<interface>> <<interface>> ResultSet ResultSet HiveBaseResultSet HiveBaseResultSet {abstract} {abstract} +setFetchSize(rows : int) : void +setFetchSize(rows : int) : void HiveQueryResultSet HiveQueryResultSet -fetchSize : int +setFetchSize(rows : int) : void • 現行版のhive-jdbc-0.7.1.jarはfetchの指定ができないし、そもそもしてない ので我慢ならんくらい遅い。特にHiveは大きなデータを取得することが多い ためfetchが使える0.8.0を使う(か、0.7.1を修正して使う。)2011/08/27 27
  29. 29. サイバー系 4.7 Rhiveを使ってみる • hive-jdbc.jarを使うのに必要なjarファイル群*にクラスパスを設定して • Thrift Serverをサーバ側で起動しておいて • ローカルマシンのRから使う source(“Rhive.R”) hiveConn <- hiveConnect(“サーバ名かIP アドレス”) ameba_user <- hiveQuery(hiveConn, “select * from ameba_user”) hiveClose(hiveConn) 必要なのjar *common-lang3-*.jar, commons-logging-1.*.jar, hadoop-core-0.20*.jar, hive-cli-0.7*.jar, hive-common-0.7*.jar, hive-contrib-0.7*.jar, hive-exec-0.7*.jar, hive-hwi-0.7*.jar, hive-jdbc-0.8*.jar, hive-metastore-0.7*.jar, hive-service-0.7*.jar, log4j-1.2*.jar, slf4j-api-1.6*.jar, slf4j-log4j12-1.6*.jar, thrift-0.5*.jar, thrift-fb303-0.5*.jar, RHive.jar2011/08/27 28
  30. 30. サイバー系 4.8 rJavaは困った子(ちょっと注意) • メモリを解放してくれない • rm(list=ls()); gc()しても • Javaで明示的にnull入れるメソッド書いて、それをRから呼び出してJavaのSystem.gc()呼び出しても メモリ使用量が減らんのですよ • メモリ解放ソフトウェアを使うしかないかなぁ →せっかくならmicrosoft社製のがいいかな 1. Windows Server 2003 Resource Kit Toolsをダウンロード http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en 2. exeファイル(インストーラ)を解凍する 1. 7Zipとか使う http://sevenzip.sourceforge.jp/ 2. 「rktools.exeを解凍」→「rktools.msiを解凍」→empty.exeをコピー 3. C:¥WINDOWS¥system32 にコピー&ペースト (64bit OSでもここ) システム命令をRから呼び出しているだけ 3. Rではこう使う system(“empty Rgui.exe”)2011/08/27 29
  31. 31. サイバー系 いまここ 1. 自己紹介 2. SAS 9.3が出た 3. Rをビルドしてみる(高速化できたらいいな) 4. 大規模データを取得してみる 5. 大規模データを扱ってみる 6. 処理の高速化をしてみる 7. 本日のハイライト2011/08/27 30
  32. 32. サイバー系 5.1 Rで大規模データを扱いたい • Rの弱点 • データは基本的にオンメモリ • 大規模データ管理パッケージ • bigmemory • 良い点・・・複数プロセスから同時にアクセスできる。つまりクラスタ処理対応可能。通常の行列の よう にデータハンドリングできる。x[1:10,]とか • 悪い点・・・行列のみ。データフレームだめ。基本的に数値型だけ • ff • 良い点・・・行列、データフレーム両方いける。因子型もいける。 • 悪い点・・・クラスタ処理できない。(試してないけどたぶんforeachとかで並列処理はできそう。) データハンドリングの関数が専用 • とりあえず、bigmemoryパッケージを使うわ • 第10回TokyoWebMining勉強会の資料が詳しい http://www.slideshare.net/sfchaos/rbigmemory-tokyowebmining102011/08/27 31
  33. 33. サイバー系 5.2 Rのbigmemoryパッケージ install.packages(bigmemory); library(bigmemory) #Rの行列からbigmemoryへ #あまり使わない backingfileを指定しないと、実体がディスク上ではなく ameba <- as.big.matrix(matrix(1:40, 10,4)) Shared memory上に作成されてしまうので注意 #bigmemory行列をあらかじめ作っておいて ameba <- big.matrix(10000000, 4, type=“integer”, init=-1, backingfile=“ameba.bin”) #カラム名をつける options(bigmemory.allow.dimnames=TRUE) 1000万行 x 4列の行列をinteger colnames(ameba) <- c(“ameba_id”, “create_year”, “create_month”, “create_day”) 型で初期値-1で作るわ。データ #追加していく の実体はカレントフォルダに 「ameba.bin」でヨロシク!って意 ameba[1:10,] <- matrix(1:40,10,4) 味です。 #csvファイルからbigmemoryへ #これが一番よく使う ameba <- read.big.matrix(“ameba.csv”, header=TRUE, sep=“,”, backingfile=“ameba.bin”, descriptorfile=“ameba.desc”) descriptorfileは省略可能。 その場合はbackingfile名+.descとなる2011/08/27 32
  34. 34. サイバー系 5.3 Rのbigmemoryパッケージ 2 データの実態はこのファイル #bigmemoryオブジェクトの永続化 ameba <- read.big.matrix(“ameba.csv”, header=TRUE, sep=“,”, backingfile=“ameba.bin”, descriptorfile=“ameba.desc”) でも次回、このデータを使う場合はこっちを明示 #Rを再起動後に読み込み ameba <- attach.big.matrix(“ameba.desc”) #行列サイズ確認 dim(ameba) #行列要素にアクセス ameba[,] #全データ出力だけどやってはダメだよ ameba[1:10, ] #先頭10行 #集計もできる library(bigtabulate) summary(ameba) bigtable(ameba, “create_year”) #table(ameba[,2])でも同じ結果が得られるけど速度がぜんぜん違う #glmもできるしk-meansもできる library(biganalytics)2011/08/27 33
  35. 35. サイバー系 5.4 Rhiveから直接bigmemoryへ • RHiveで取得するデータって普通はgigabyte越えだから、直接bigmemory化 されるといいね!!でも問題がちらほら… 1. メモリの問題 R上の変数 Java rJava R上の変数 Java (オンメモリ) (オンメモリ) rJava CSVファイル bigmemory bigmemory (ディスク上) (ディスク上) 2. 型の問題 bigmemoryだと数値  Java側で文字列を数値に変換(変換表はHashMap) RでそのHashMapを受けとるとかの工夫が必要2011/08/27 34
  36. 36. サイバー系 5.5 ちなみにRのhashパッケージが結構便利 install.packages(hash) Javaなんかでよ く使うHashみた library(hash) いなのをがRでも 使えるよって話 h <- hash() .set(h, “Tokyo.R16”, “DeNA”) .set(h, a=1, b=2, c=3) #一括でもセットできる。 h <- hash(a=1, b=2, c=3) #生成時に一括セットもできる values(h, “Tokyo.R16”) [1] “DeNA” clear(h) #これしないとメモリ解放しないらしい rm(h) #だから↑rmする前にclearしておくこと2011/08/27 35
  37. 37. サイバー系 いまここ 1. 自己紹介 2. SAS美の近況 3. Rをビルドしてみる(高速化できたらいいな) 4. 大規模データを取得してみる 5. 大規模データを扱ってみる 6. 処理の高速化をしてみる 7. 本日のハイライト2011/08/27 36
  38. 38. サイバー系 6.1 処理の高速化 • 並列処理して高速化してみる • Rは基本シングルコアでしか計算しない。 • とはいえ、大規模データ扱うなら(しかもコアが余ってるなら)並列処理したいよね • めちゃくちゃショボイ例で申し訳ない。 install.packages("foreach") install.packages(“doSMP”) #Linux, MacOSXはdoMCでもいいけど、WindowsはdoMCが使えないからdoSMPを使う getDoParWorkers() #現状の使用コア設定数を確認 #[1] 1 #このままだとコア1つしか使わない w <- startWorkers(4) #並列処理する数を設定 registerDoSMP(w) #これで並列計算用のプロセス(windowsだったらRterm.exe)が多数起動する。 getDoParWorkers() #使用コア設定数が変更されたか確認 #[1] 4 %dopar%を%do%にすると並列計算しないよ foreach(i = 1:N, .combine = “c”) %dopar% { #for文のかわりにforeach文を使う sum(rnorm(1e+6)) } cだと戻り値がベクトルになる。ここを例えばcbindにすると横に長いmatrixで戻ってくる stopWorkers(w) #最後にWorkerを消し去る #↑これしないとR(windowsだったらRgui.exe)を終了してもプロセス(windowsだったらRterm.exe)が多数残ってしまう。 #これせずにRを終了させて残ってるRterm.exeプロセスをkillしても次回にRを起動してからstartWorkers()呼んだ時に 警告メッセージ: 1: In startWorkers(12) : there is an existing doSMP session using doSMP1 #こんなんでる。その時は↓みたくしてセッションを切るとOK rmSessions(qnames="doSMP1") もう仕分け無い2011/08/27 37
  39. 39. サイバー系 6.2 Revolution R Enterprise Editionがなかなかいいかも http://www.revolutionanalytics.com/why-revolution-r/which-r-is-right-for-me.php これ、RevoScaleRというパッケージ なんだが、なかなか良さそう。 1. データはファイルシステムに置く 2. ベクトル、行列、データフレーム使える (リストはダメっぽい) 3. 数値型、因子型、文字列扱える 4. 計算処理は自動的に並列処理してく れる 5. もうじきクラスタ計算に対応2011/08/27 38
  40. 40. サイバー系 6.3 Revolution R Enterprise Edition • $1,000/year/user • HPCクラスタだといくらかわかんない2011/08/27 39
  41. 41. サイバー系 いまここ 1. 自己紹介 2. SAS美の近況 3. Rをビルドしてみる(高速化できたらいいな) 4. 大規模データを取得してみる 5. 大規模データを扱ってみる 6. 処理の高速化をしてみる 7. 本日のハイライト2011/08/27 40
  42. 42. サイバー系 7. 本日のハイライト 1. 自己紹介 @wdkzはサイバー系 2. SAS 9.3出たよ SAS 9.3出たけど… 3. Rをビルドしてみる Windowsマシンは窓から投げ捨てたくなる 4. 大規模データを取得してみる RでHiveQLを使って直接データ取得する 5. 大規模データを扱ってみる bigmemoryつかう。HiveQL->bigmemoryとか。 6. 処理の高速化をしてみる foreachとdoSMPで並列化できる。 RevoScaleRもいいね!2011/08/27 41

×