无法在有大量可用内存的情况下在 R 中分配向量

Unable to allocate vector in R with plenty of memory available

我正在尝试使用 data.table 包在 R 64 位上加载一个大型 CSV 文件(226M 行 x 38 列)。磁盘上文件的大小约为 27Gb。我在 64GB RAM 的服务器上执行此操作。我关闭了大部分其他所有东西并开始了一个新的 R/Rstudio session 所以当我启动 fread 时只使用了 2Gb 的内存。在读取过程中,我看到内存使用量攀升至大约 45.6 Gb,然后我得到了可怕的 Error: cannot allocate vector of size 1.7 Gb。但是,仍有超过 18Gb 可用。是否有可能在 18Gb 的 RAM 中没有一个连续的 1.7Gb 块?它是否与 committed size 有关(我承认没有完全理解),如果是,是否有任何方法可以最小化承诺的大小,以便 space 保持足够

该列表包含一组用户的历史记录,我想针对这些用户群随时间汇总和总结某些统计数据。我已经能够使用 fread 中的 select 导入 38 列的子集,所以我并没有完全不知所措,但这确实意味着我是否需要使用其他变量,我需要取舍,最终可能 运行 陷入同样的​​错误。

对于我的设置,是否有其他方法可以将整个数据集存入内存,或者我是否需要继续只导入子集或转移到 big-data 友好的平台?

谢谢。

读取前的内存使用情况

失败时的内存使用情况

Session 信息

R version 3.3.0 Patched (2016-05-11 r70599)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows Server >= 2012 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.9.6

loaded via a namespace (and not attached):
[1] tools_3.3.0  chron_2.3-47

您 运行 内存不足,因为某些类型的数据作为纯文本使用的内存比在内存中占用的内存少(反之亦然)。这方面的经典例子是例如单个数字整数 (0-9),在文本文件中只占用一个字节,但在 R 中将使用 4 个字节的内存(相反,大于 4 位数字将占用比相应文本字符更少的内存)。

一个解决方法是将这些列读取为 character,这将使内存占用保持不变,并且仅在对它们进行数字运算时才将它们转换为整数。权衡自然是速度。