我通过SQL查询收集数据虽然是R.我有一个循环来拉大块的小块,保存块并丢弃块,重复一个小时左右,直到整个表在平面文件中我的RSQL目录。
但是,R会超出Cputime限制:每隔一段时间就会出现24次错误。
我正在运行Mountain Lion。
我试过了
很好-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,并查看其工作原理。
答案 0 :(得分:0)
尝试过ulimit ...出现我无法访问,即使是通过sudo。我从
获得相同的输出ulimit -a -H
在给予之前和之后
ulimit -t 12000 # sets cputime limit to 12000 seconds from 600 seconds
通过Debian虚拟机解决。如果有人有Mountain Lionic解决方案,请告诉我们。
答案 1 :(得分:0)
粗略的谷歌搜索“超出Cputime限制:24”,这表明这不是R特定的错误。
基于你发布的循环,我猜它超过了queryDB
调用的cpu时间限制,因为你从数据库中检索的块大小。
我不确定你的from
和to
数学是否检出:在行= 1e5,你正在加载1e11 id,如果你减少它所以行= 1,你正在加载表格中有1e6个ID。
无论哪种方式,尝试减少从数据库加载的块的大小,看看是否有帮助