aws.s3パッケージでRからAWS S3にCSV、GZIPを保存する
注: この記事は2017年08月23日に最終更新したQiita投稿記事を、こちらのブログに移植したものです。
RからS3に直接データを書き込みたいときがあります。 そんなときは aws.s3パッケージが大変便利でありまして、使い方は 「株式会社ホクソエムのブログ」の下記記事が非常に詳しいです。
awe.s3パッケージでRからのAWS S3とのファイルやりとりを行う
上記記事ではCSVをS3にアップするために一度保存していますが、これは aws.s3::s3write_using関数を使うことで一発でS3にCSVでアップできます。
library(aws.s3) Sys.setenv(~) # 上記記事を参考にセットアップ s3write_using(iris, write.csv, object = "iris.csv", bucket = "your-bucket-name")
また、RedShiftを使うときなどは、GZIP形式で保存したいことがあります。 そんなときは下記のように関数を作ればOKです。
library(aws.s3) Sys.setenv(~) fun <- function(x, tmp, ...){ gz.handler <- gzfile(tmp) write.csv(x, gz.handler) } s3write_using(iris, fun, object = "iris.csv.gz", bucket = "your-bucket-name")
簡単なので必要ないかもしれませんが軽く解説すると、パッケージのソースを見ると、 aws.s3::s3write_using関数内部では、いったんtempfileに保存して、それをaws.s3::put_objectでS3にアップロードしているようです。
なので、aws.s3::s3write_using関数に引数で渡す関数のなかで、上のようにgzfile関数をカマしてやればOKです。
以上です。