# These variables should be set in your environment, but you could set them in R:
Sys.setenv("AWS_ACCESS_KEY_ID" = "mykey",
"AWS_SECRET_ACCESS_KEY" = "mysecretkey",
"AWS_DEFAULT_REGION" = "us-east-1")
library("aws.s3")
如果您有一个R对象obj,您想保存到AWS,稍后读取:
s3save(obj, bucket = "my_bucket", object = "object")
# and then later
obj <- s3load("object", bucket = "my_bucket")
raw_data <- get_object('data.csv', 'my_bucket')
# this method to parse the data is copied from the httr library
# substitute encoding from as needed
data <- iconv(readBin(raw_data, character()), from="UTF-8", to="UTF-8")
# now the data can be read by any R function, eg.
read.csv(data)
fread(data)
# All this can be done without temporary objects:
fread(iconv(
readBin(get_object('data.csv', 'my_bucket'), character()),
from="UTF-8", to="UTF-8"))
2条答案
按热度按时间6l7fqoea1#
您可以使用AWS S3 package:
要执行读取:
如果您有一个R对象
obj
,您想保存到AWS,稍后读取:显然,用桶名和文件名(AWS桶中对象的名称)替换真实的值。该包也有相应的
s3save
函数,你也可以用s3saveRDS
和s3readRDS
以RDS格式保存和加载。如果你需要读取一个文本文件,那就有点复杂了,因为库的函数'get_object'返回一个原始向量,我们必须自己解析它:
据我所知,您的“签名URL”概念是不可用的。警告,如果您尝试开发这样的解决方案:考虑在源代码中存储秘密访问密钥的安全含义是很重要的。
另一个关于“签名的url”的问题是对象将被存储在内存中。如果工作区被保存,它将被存储在磁盘上。这样的解决方案必须仔细检查安全性。
fafcakar2#
稍有事后,还可以使用
aws.s3
包,可以做到: