【发布时间】:2018-01-03 20:27:30
【问题描述】:
我一直在这个网站上阅读,但无法找到确切的答案。如果它已经存在,我为重新发布而道歉。
我正在处理非常大的数据集(6 亿行,64 列,在具有 32 GB RAM 的计算机上)。我真的只需要这些数据的小得多的子集,但是除了简单地用 fread 导入一个数据集并选择我需要的 5 列之外,我还在努力执行任何功能。之后,我尝试用我需要的特定条件覆盖我的数据集,但我达到了我的 RAM 上限并收到消息“错误:无法分配 4.5 GB 的向量大小。我将 ff 和 bigmemory 包作为替代方案,但似乎就像你不能在导入这些包之前进行子集化?除了升级计算机上的 RAM 之外,有没有解决这个问题的方法?
我正在尝试执行的任务:
>SampleTable<-fread("my.csv", header = T, sep = ",", select=c("column1", "column2", "column7", "column12", "column15"))
>SampleTable2<-SampleTable[SampleTable[,column1=="6" & column7=="1"]]
此时,我达到了我的内存上限。尝试使用另一个包但导入 6 亿行的所有 64 列会更好吗?我也不想为了执行一次导入而花费数小时。
【问题讨论】:
-
欢迎来到 SO。在大内存中有很多资源要读取。看看ff package。此外,您不会覆盖名为 SampleTable 的数据框,而是创建一个名为 SampleTable2 的新数据框。
-
将您的数据存储在数据库中,并在需要时仅检索您需要的位。
-
所以为了确保理解正确,你有一个600M行64列的文件。而且,您想将其读入数据框中,仅保留 64 列中的 5 列,并对行应用过滤器?
-
还有,这 5 列都是数字吗?
-
@sayaa 抱歉,我两种都试过了,一种是我创建了一个新的“SampleTable2”,另一种是我尝试覆盖“SampleTable”,但我仍然遇到同样的错误
标签: r memory-management data.table ff r-bigmemory