2

我正在尝试使用 R 处理 1909x139352 数据集。由于我的计算机只有 2GB 的 RAM,因此数据集对于传统方法来说太大(500MB)。所以我决定使用这个ff包。但是,我遇到了一些麻烦。该函数read.table.ffdf无法读取第一块数据。它崩溃并出现下一个错误:

txtdata <- read.table.ffdf(file="/directory/myfile.csv", 
                           FUN="read.table", 
                           header=FALSE, 
                           sep=",", 
                          colClasses=c("factor",rep("integer",139351)), 
                          first.rows=100, next.rows=100, 
                          VERBOSE=TRUE)

  read.table.ffdf 1..100 (100)  csv-read=77.253sec
  Error en  ff(initdata = initdata, length = length, levels = levels, ordered = ordered,  : 
   write error

有谁知道发生了什么?

4

3 回答 3

2

此错误消息表明您有太多打开的文件。在 ff 中,您的 ffdf 中的每一列都是一个文件。您只能打开有限数量的文件 - 而您已经达到了该数量。请参阅我关于如何调试此 FF 错误的任何想法的回复?.

因此,在您的情况下,仅使用 read.table.ffdf 将不起作用,因为您有 139352 列。但是,可以将其导入 ff,但在打开列时需要小心,同时在 RAM 中获取数据以避免此问题。

于 2012-12-25T11:57:21.063 回答
1

你的数据集真的没有那么大。如果你说一下你想用它做什么,它可能会有所帮助。这可能会有所帮助:增加 R 中的可用内存, 或者如果这不起作用,则 data.table 包非常快,并且在使用 := 运算符操作 data.tables 时不会占用内存。
至于 read.table.ffdf,请查看.. read.table.ffdf 教程,如果您仔细阅读,它会提供有关使用 gc() 等命令优化内存使用的提示和详细信息。

于 2012-12-25T00:03:35.387 回答
1

我最近在一个大约有 3,000 列的数据框中遇到了这个问题。解决此问题的最简单方法是调整允许为您的用户帐户打开的最大文件数。典型系统设置为 ~ 1024,这是一个非常保守的限制。 请注意,它设置为防止服务器上的资源耗尽。

在 Linux 上:

将以下内容添加到您的/etc/security/limits.conf文件中。

youruserid hard nofile 200000 # you may enter whatever number you wish here youruserid soft nofile 200000 # whatever you want the default to be for each shell or process you have running

在 OS X 上:

/etc/sysctl.con在您的文件 中添加或编辑以下内容。 kern.maxfilesperproc=200000 kern.maxfiles=200000

您需要注销并重新登录,但原始发帖人将能够使用 ffdf 打开他的 139352 列数据框。

我在这里发布了更多关于我与此限制的磨合的信息

于 2016-12-02T16:29:38.787 回答