我正在尝试使用包ff中的read.table.ffdf从文本文件中导入一个非常大的数据集(101 GB)。该数据集具有> 2.85亿条记录,但我只能读取前169,457,332行。数据集由44个可变宽度列以制表符分隔。我搜索了stackoverflow和其他留言板,并尝试了很多修复,但仍然只能导入相同数量的记录。
这是我的代码:
relFeb2016.test <- read.table.ffdf(x = NULL, file="D:/eBird/ebd_relFeb-2016.txt", fileEncoding = "", nrows = -1, first.rows = NULL, next.rows = NULL, header=TRUE, sep="\t", skipNul = TRUE, fill=T, quote = "", comment.char="", na.strings="", levels = NULL, appendLevels = TRUE, strip.white=T, blank.lines.skip=F, FUN = "read.table", transFUN = NULL, asffdf_args = list(), BATCHBYTES = getOption("ffbatchbytes"), VERBOSE = FALSE, colClasses=c("factor","numeric","factor","factor","factor","factor","factor", "factor","factor","factor","factor","factor","factor","factor","factor","factor","factor","factor","factor","factor","factor","factor","numeric","numeric","Date","factor","factor","factor","factor","factor","factor","factor","factor", "factor","factor","numeric","numeric","numeric","factor","factor","numeric","factor","factor"))
这是我尝试过的:
添加skipNUL=TRUE
以绕过我知道数据中存在的空字符。
添加quote=""
和"comment.char=""
以绕过引号,英镑符号以及我知道数据中存在的其他字符。
添加了na.strings=""
和fill=TRUE
,因为许多字段都留空了。
尝试使用UTF-16编码(encoding="UTF-16LE"
)读取它,以防特殊字符仍然存在问题,但EmEditor将其报告为UTF-8无符号。
使用memory.limit(size=500000)
从130000起将内存限制增加了三倍以上。
这是我排除的:
我的数据不是固定宽度的,因此我无法在laf_open_fwf
中使用LAF
,这解决了此处所述的类似问题:http://r.789695.n4.nabble.com/read-table-ffdf-and-fixed-width-files-td4673220.html
我无法使用bigmemory
,因为我的数据包含各种数据类型(因子,日期,整数,数字)
上次导入的记录没有什么特别之处应该导致导入中止
因为它每次始终读取相同数量的记录,并且它始终是前16900万条记录的块,所以我认为问题不能追溯到特殊字符,文件。
使用read.table.ffdf
可以导入的记录数量是否有上限?有人可以推荐替代解决方案吗?谢谢!
ETA:不会返回任何错误消息。我正在使用运行Windows Server 2012 R2的服务器,驱动器上有128GB RAM和> 1TB。