2017-07-20 61 views
2

如何从r studio直接从Amazon s3读取csv。我不能只用read_csv,如果我把,AWS s3 r studio

read_csv(url("s3a://abc/rerer.txt")) 

我得到

错误的URL( “S3A://abc/rerer.txt”): URL方案不支持通过这种方法

我不想先在本地移动文件。我尝试使用AWS s3库中的get_bucket之类的函数,但这不是人类可读的格式。

回答

1

我推荐CloudyR项目中的包aws.s3

安装该软件包:

# stable version 
install.packages("aws.s3", repos = c("cloudyr" = "http://cloudyr.github.io/drat")) 

# on windows you may need: 
install.packages("aws.s3", repos = c("cloudyr" = "http://cloudyr.github.io/drat"), INSTALL_opts = "--no-multiarch") 

一旦安装,你可以阅读该文件中,就像这样:

library("aws.s3") 
r = aws.s3::get_object(bucket = "bucket",object = "object.csv") 

由于@Thomas在评论中提到,如果你知道文件类型,你可以使用read_using()函数结合freadread_csv或您通常使用的任何R函数。这样在检索数据后保存了解析步骤。

如果您的凭证已经是环境变量,则几乎不需要设置。否则,您可以像这样添加它们:

Sys.setenv("AWS_ACCESS_KEY_ID" = "mykey", 
      "AWS_SECRET_ACCESS_KEY" = "mysecretkey", 
      "AWS_DEFAULT_REGION" = "us-east-1", 
      "AWS_SESSION_TOKEN" = "mytoken") 

还支持多个AWS账户。你可以找到CloudyR项目和它的文档在这里:

https://github.com/cloudyr

具体来说,CloudyR的AWS S3 API客户端的网页是在这里找到:

https://github.com/cloudyr/aws.s3

+0

谢谢您的答复。我得到了这个工作。问题是你不能使用变量r。它不是以人类可读的格式。就像我想要一个变量,当文件是S3中的文件的本地文件时,该变量相当于read_csv(文件)。 – Ark

+0

如果您知道对象是csv,那么您可以尝试使用'aws.s3 :: read_using()'而不是'get_object()'来使用通常用于csv的任何导入函数来读取内容。 – Thomas

+1

@Ark我刚刚重新登录并阅读了两条评论。谢谢托马斯给他的指导,如果你不介意的话,我会把这个评论加到我的答案中。我会适当地引用你。 –