如何在 R 中操作庞大的数据集?
Posted
技术标签:
【中文标题】如何在 R 中操作庞大的数据集?【英文标题】:How to manipulate a huge data set in R? 【发布时间】:2019-03-10 15:08:21 【问题描述】:首先,很抱歉可能重复了这个问题。 但是,我查看了很多其他类似的问题,但无法解决我的问题。
嗯,我正在处理一个庞大的数据集,其中包含 184,903,890 行。超过 6.5GB 的对象。 此 csv 文件可通过此链接访问:Ad Tracking Fraud Detection Challenge
我在一台具有以下规格的电脑上运行它:
i7 - 7700K - 4.2GHz 16GB 内存 GeForce GTX 1080 Ti,11.2GB DDR 5但是,即使我尝试将列设置为日期,系统也会停止工作。 是否可以仅使用 R 来处理这种大小的数据集?
代码详情:
training <- fread('train.csv')
一些尝试停止 R 或返回无法分配大小向量 ...:
training$click_time <- as.Date(training$click_time)
training$click_time <- as.POSIXct(training$click_time, 'GMT')
training <- training %>% mutate(d_month = sapply(click_time, mday)
其他更新:
我已经用gc()清理内存了; 我已经只为新数据集选择了 2 列;【问题讨论】:
在fread
中通过colClasses
设置课程有帮助吗?
Sonny 建议使用fasttime package
进行转换。但是当我尝试它时,我收到以下消息:Error: cannot allocate vector of size 705.4 Mb.
但我还有其他问题需要处理。例如,当我尝试使用 mutate
提取月份时,它也停止运行。
尝试使用gc()
删除所有对象并释放 RAM。我认为 16GB RAM 已经足够了。有许多内核构建在 16GB RAM 上。还要删除您现在不打算使用的字段。甚至可以尝试采样以减少行数
我已经尝试过使用gc()
并删除无用的字段。我只是不想对原始数据集进行采样。关于 16GB RAM,我同意你的看法。但是我仍然没有让这个运行而不需要减少数据行。
即使内存中的大小可能小于 6.5G(如果这是磁盘上 CSV 文件的大小),但只有数据集大小的一小部分可用作为记忆。您可以将数据放在 RDMB 中并首先通过 SQL 使用它(使用 R 前端)吗?请参阅cran.r-project.org/web/views/HighPerformanceComputing.html的“大内存和内存不足数据”部分...
【参考方案1】:
也许您使用了分配给 R 的内存。试试memory_limit()
,如果需要,您可以使用memory.limit(size = xxxx)
增加默认值
【讨论】:
我已经试过了 Flopeko!我想知道使用 Python 或任何其他不在内存上运行的语言是否更好。以上是关于如何在 R 中操作庞大的数据集?的主要内容,如果未能解决你的问题,请参考以下文章