【发布时间】:2023-04-07 01:19:01
【问题描述】:
我在 data.table (1.8.8, R 3.0.1) 中使用 fread 来尝试读取非常大的文件。
有问题的文件有 313 行和大约 660 万列数字数据行,文件大约 12gb。这是具有 512GB 内存的 Centos 6.4。
当我尝试读取文件时:
g=fread('final.results',header=T,sep=' ')
'header' changed by user from 'auto' to TRUE
Error: protect(): protection stack overflow
我尝试使用 --max-ppsize 500000 启动 R,这是最大值,但同样的错误。
我还尝试通过将堆栈大小设置为无限制
ulimit -s unlimited
虚拟内存已设置为无限。
我对这种大小的文件是否不切实际?我错过了一些相当明显的事情吗?
【问题讨论】:
-
请在 R-Forge 上试用 v1.8.9(data.table 主页上的链接)。
fread有 10 个错误修复,请参阅新闻。大文件支持就是其中之一,但在 Windows 上应该可以在 Linux 上使用。 660 万列 (!) 是新的,很可能是一个新错误。请确认 v1.8.9,我们将从那里开始...... -
@MatthewDowle 是的,我对 600 万行也不满意。安装 1.8.9,同样的错误。我制作了一个小得多的文件,10 行 x 50K 列,同样的错误。 10 行 x 49,999 列它可以工作。
-
您是指该评论中的列(您写了 600 万行)?非常有趣和奇怪,它恰好在 50,000 列时失败。如此迅速地磨练这一点做得很好。我不记得有任何这样的列限制。会看看。
-
抱歉,是的列。关于第一个评论的问题,我有 512Gb 的 RAM,为什么文件不适合?感谢 data.table 的出色工作。
-
Apols,我看错了。出于某种原因,我将 512 解释为 MB,因为那时 512GB RAM 相当大!即使你写了 512GB。所以,是的,应该当然读得很好。
read.table/read.csv是否适用于 50k 列和 6e6 列?
标签: r data.table large-data