加载大型文本文件时遇到问题;我将发布以下代码。该文件大约为65 GB,使用" |"分隔。我有10个。我将在下面描述的过程适用于9个文件,但最后一个文件给我带来了麻烦。请注意,其他9个文件中大约有一半比这大 - 大约70 GB。
# Libraries I'm using
library(readr)
library(dplyr)
# Function to filter only the results I'm interested in
f <- function(x, pos) filter(x, x[,41] == "CA")
# Reading in the file.
# Note that this has worked for 9/10 files.
tax_history_01 <- read_delim_chunked( "Tax_History_148_1708_07.txt",
col_types = cols(`UNFORMATTED APN` = col_character()),
DataFrameCallback$new(f), chunk_size = 1000000, delim = "|")
这是我收到的错误消息:
Error: cannot allocate vector of size 81.3 Mb
Error during wrapup: could not allocate memory (47 Mb) in C function 'R_AllocStringBuffer'
如果有帮助,Windows表示该文件为69,413,856,071字节,而readr表示100%为66198 MB。我已经做了一些搜索,并且确实无法了解发生了什么。我有一个小小的预感,文件可能有问题(例如缺少分隔符)。
编辑:只是我咨询过的一小部分资源样本。 更具体地说,给我带来麻烦的是&#34;包装过程中的错误:...在C函数&#39; R_AllocStringBuffer&#39; &#34; - 我对这个错误找不到多少。
这篇文章中的一些语言让我相信已达到字符串向量的限制,并且可能存在解析错误。 R could not allocate memory on ff procedure. How come?
看到这篇文章,似乎我面临着另一个问题。对我来说,这不是一个真正的计算问题。 R memory management / cannot allocate vector of size n Mb
我提到这篇关于清理工作空间的帖子。在一次导入中不是一个问题,但是当我运行脚本导入所有10个时,这是一个很好的做法 Cannot allocate vector in R of size 11.8 Gb
更多与此相关的主题: R Memory "Cannot allocate vector of size N"
发现这一点,但由于数据隐私造成的机器限制,它没有任何帮助: https://rpubs.com/msundar/large_data_analysis
阅读一般的良好做法: http://adv-r.had.co.nz/memory.html http://stat.ethz.ch/R-manual/R-devel/library/base/html/Memory-limits.html
答案 0 :(得分:1)
查看文件的宽度。如果这是一个非常宽的文件,则您的// below is base64 String snippet.
var base64Str = "0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA\r\nEAAA/v///wAAAAD+////AAAAAAEAAAD/////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////\r\n//////////////////////////////////////////////////////////////////////////9S\r\nAG8AbwB0ACAARQBuAHQAcgB5AAAAAAAAAAAAAA .........";
base64Str = base64Str.replace(/\\r\\n/g,"");
var decoder = Ext.util.Base64.decode(fileStr);
testApp.view.main.FileExport.saveAs(decoder,'SHANGTOUDI_JF_20180320_0800.xls','UTF-8');
}
可能使它成为一次可以读取的最大单个块,即使它不是最大的整体文件也是如此。
此外,请确保释放(chunk_size = 1000000
)先前读取的块,以便返回内存并再次可用。如果您依靠上一个块的覆盖,那么您实际上已经使内存需求增加了一倍。
答案 1 :(得分:0)
我只是遇到了这个错误-我浏览了maxo的链接,阅读了评论,仍然没有解决方法。
以我为例,原来我正在读取的csv在复制过程中已损坏(使用md5sum检查对此进行了检查,事后看来,我应该立即执行此操作)。
我猜发生了什么事,是由于损坏的数据的性质,有一个打开的引号没有其对应的结束引号,导致文件的其余部分作为一个VERRRRYY LARRRGE字符串读入。那是我的猜测。
无论如何,希望这对以后的人有所帮助:-)。