【发布时间】:2018-11-19 08:58:58
【问题描述】:
我正在使用 AWS R Studio 从 S3 读取 35 GB 的 csv 文件并执行分析。我选择了一台具有 62 GB 内存的 m4.4xlarge 机器,但在执行任何分析之前读取数据时,我不断收到以下消息:“错误:无法分配大小为 33.0 Gb 的向量”。我使用的代码是:
library("aws.s3")
Sys.setenv("AWS_ACCESS_KEY_ID" = "xxxxxxx",
"AWS_SECRET_ACCESS_KEY" = "yyyyyyy")
obj <-get_object("s3://xxx/yyy.csv")
当我使用以下代码时,
aws.s3::s3read_using(read.csv, object=“"s3://xxx/yyyy.csv”)
错误信息变为:
我收到的错误信息如下:
Error in curl::curl_fetch_disk(url, x$path, handle = handle) :
Failed writing body (4400 != 16360)
我不熟悉 Linux,我使用的是 Louis Aslett 的 AMI (http://www.louisaslett.com/RStudio_AMI/)。有什么我应该改变的设置吗?谢谢!
我怀疑该问题与以下两个问题有关,但尚未发布明确答案。
Reading large JSON files from S3 in RStudio EC2 instance (Louis Aslett's AMI)
Trouble Uploading Large Files to RStudio using Louis Aslett's AMI on EC2
【问题讨论】:
-
请将您的代码的相关部分添加到您的问题中,以便我们更容易“诊断”。我的第一印象是,由于修改数据,R 代码(您的或使用过的包的代码)在内部使用了过多的 RAM。你到底在用这些数据做什么?如果您不使用
data.table和fread(),则会因内存不足而遇到问题(data.table的每个小修改都会生成完整副本,并且数据的大小会更大超过一半的 RAM...) -
谢谢@RYoda!我已经用我使用的 R 代码更新了这个问题。我的问题从读取 csv 文件开始,没有进行任何分析。
-
好的,第一步是使用
data.table:fread而不是base R的read.csv来读取CSV文件。这更快并且具有更低的内存开销。另一个问题是:curl::curl_fetch_disk在内部被调用并且不能写入(!)。我不确定 curl 是仅虚拟写入(“管道”)还是物理写入(临时存储),所以:你有足够的存储空间吗?最后一件事:CSV文件的编码是什么?如果您使用的是非标准字符编码,则必须指定fileEncoding(在read.csv中)或encoding参数(在fread中),否则在 EOF 之前阅读我的内容。 -
@RYodam
fread有效。执行一些分析后,我在将文件从 rstudio 保存到 S3 时遇到问题。我正在使用aws.s3::s3write_using:它适用于小数据集,但不适用于大数据集(35gb)。运行 write_using 代码一小时后,它还在运行,没有保存数据。关于如何有效地将数据从 rstudio 保存到 S3 以便我下次启动实例时不需要再次运行代码的任何想法?谢谢! -
对不起,我没有使用 S3 的经验,也许你打开了一个新问题,因为它与原来的问题不同。请描述 RStudio 在您的客户端/服务器设置中的运行方式/位置,因为网络主要是传输数据的限制因素...
标签: r amazon-web-services amazon-ec2 amazon-ami