将R数据作为csv直接写入s3

将R数据作为csv直接写入s3,r,csv,amazon-web-services,amazon-s3,R,Csv,Amazon Web Services,Amazon S3,我希望能够将数据作为csv文件从data.frame\data.table对象直接写入AWS s3中的bucket,而无需先使用AWS CLI将其写入磁盘 obj.to.write.s3 <- data.frame(cbind(x1=rnorm(1e6),x2=rnorm(1e6,5,10),x3=rnorm(1e6,20,1))) obj.to.write.s3当然——但是“保存到文件”要求操作系统将所需的目标目录视为可访问的文件系统。所以本质上,您“只是”需要挂载S3。这里有一个关于

我希望能够将数据作为csv文件从
data.frame
\
data.table
对象直接写入AWS s3中的bucket,而无需先使用AWS CLI将其写入磁盘

obj.to.write.s3 <- data.frame(cbind(x1=rnorm(1e6),x2=rnorm(1e6,5,10),x3=rnorm(1e6,20,1)))
obj.to.write.s3当然——但是“保存到文件”要求操作系统将所需的目标目录视为可访问的文件系统。所以本质上,您“只是”需要挂载S3。这里有一个关于这个话题的例子


另一种方法是写入临时文件,然后使用您使用的任何东西来传输文件。您可以将这两个操作编码为一个简单的助手函数。

最简单的解决方案就是将.csv保存在
tempfile()
中,当您关闭R会话时,该文件将自动清除

如果只需要在内存中工作,则可以通过对连接执行
write.csv()
来完成此操作:

# write to an in-memory raw connection
zz <- rawConnection(raw(0), "r+")
write.csv(iris, zz)

# upload the object to S3
aws.s3::put_object(file = rawConnectionValue(zz),
    bucket = "bucketname", object = "iris.csv")

# close the connection
close(zz)
在0.2.2中添加了
s3write\u using()
(和
s3read\u using()
)函数

它们使事情变得更简单:

s3write_using(iris, FUN = write.csv,
                    bucket = "bucketname",
                    object = "objectname")

这是一个不错的功能,您也可以使用此功能轻松保存拼花地板文件-
s3write\u使用(iris,FUN=arrow::write\u parquet,bucket=“bucketname”,object=“objectname”)
objectname指的是什么?S3 bucket中的文件夹?@nak5120 S3中并没有真正的“文件夹”(在Google中查找),您认为文件夹实际上是对象名称的一部分,您应该在
objectname
中提供它。值得注意的是,使用
s3write\u使用
确实让事情变得简单,但也会在将文件放入S3之前将其写入本地磁盘。
# check that it worked
## (option 1: save locally)
save_object(object = "iris.csv", bucket = "bucketname", file = "iris.csv")
read.csv("iris.csv")
## (option 2: keep in memory)
read.csv(text = rawToChar(get_object(object = "iris.csv", bucket = "bucketname")))
s3write_using(iris, FUN = write.csv,
                    bucket = "bucketname",
                    object = "objectname")