0

我正在通过 SQL 查询通过 R 收集数据。我有一个循环来提取大表的小块,保存块并删除块,重复一个小时左右,直到整个表位于我的 RSQL 目录中的平面文件中.

但是,R 每隔一段时间就会发出 Cputime limit exceeded: 24 错误。

我在跑山狮。

我努力了

nice -19n R CMD BATCH myscript.R

并且操作系统继续以奇数间隔终止该进程。我不相信脚本会卡在特定的操作上,只需要一段时间就可以完成循环。

循环看起来像这样..

for (i in 1:64){
  foobyte <- NULL
  for (j in 0:7){
    max id = 1000000
    rows = 1e5
    to = max_id * (rows * j) - (i * 7 * rows)
    from = max_id * (rows * (j-1)) - (1 * 7 * rows)
    foobit <- queryDB(paste("SELECT * FROM foobar where id <= ', to,' and id > ',from,';")
    foobyte <- rbind(foobit, foobyte)
    }
  filename <- paste("/my/data/dir/foobyte", j, ".csv", sep="")
  write.table(foobyte, filename)
}

它在崩溃前运行 30-90 分钟。我将尝试仅在该终端会话中从调用 ulimit 的 shell 脚本启动 R,看看它是如何工作的。

4

2 回答 2

0

尝试过 ulimit... 似乎我无权访问,即使通过 sudo 也是如此。我得到相同的输出

ulimit -a -H

给予之前和之后

ulimit -t 12000 # sets cputime limit to 12000 seconds from 600 seconds

通过 Debian 虚拟机解决。如果有人有山狮解决方案,请告诉我们。

于 2013-06-21T21:49:21.210 回答
0

粗略的谷歌搜索“超出 Cputime 限制:24”告诉我这不是 R 特定的错误。

根据您发布的循环,我猜测它超出了queryDB调用的 cpu 时间限制,因为您从数据库中检索的块的大小。

我不确定您的fromto数学是否检查出来:在 rows = 1e5 时,您正在加载 1e11 id,如果将其减少为 rows = 1,则从表中加载 1e6 id。

无论哪种方式,尝试减小从数据库加载的块的大小,看看是否有帮助

于 2013-06-23T09:59:28.137 回答