无法在R中分配矢量并且有足够的可用内存

Avr*_*ham 12 r out-of-memory data.table

我正在尝试使用该data.table程序包在R 64位上加​​载大型CSV文件(226M行乘38列).磁盘上文件的大小约为27Gb.我在具有64GB RAM的服务器上执行此操作.我关闭了大部分其他内容并启动了一个全新的R/Rstudio会话,所以当我启动时,fread只使用了2Gb的内存.随着读取过程,我看到内存使用量攀升到大约45.6 Gb,然后我感到害怕Error: cannot allocate vector of size 1.7 Gb.但是,仍有超过18Gb可用.是否有可能在18Gb的RAM中没有一个连续的1.7Gb块?它是否与承诺的大小有关(我承认不完全理解),如果是这样,有没有办法最小化承诺的大小,以便留下足够的空间

该列表包括我想要汇总的一组用户的历史记录,并随着时间的推移汇总某些统计信息.我已经能够使用selectin 导入38列的子集fread,所以我不会完全丢失,但它确实意味着我需要使用其他变量,我需要选择,并且可能最终会遇到同样的错误.

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

谢谢.

读取之前的内存使用情况

读取前的内存使用情况

失败时的内存使用情况

内存使用失败

会话信息

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
Run Code Online (Sandbox Code Playgroud)

edd*_*ddi 5

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

解决此问题的一种解决方法是读取这些列character,这将保持内存占用相同,并且仅在对它们进行数值运算时将它们转换为整数。权衡自然是速度。