2013-06-20 2 views
0

Я собираю данные через SQL-запрос, хотя R. У меня есть петля, чтобы вытащить небольшие куски большой таблицы, сохранить кусок и выбросить кусок, повторить в течение часа или около того вся таблица находится в плоских файлах в моем каталоге RSQL.R - OSX Mountain Lion и CPU Limit

Однако R побеждает предел Cputime превышен: 24 ошибки каждый так часто.

Я бегу Горный лев.

Я попытался

хороший -19n R CMD BATCH myscript.R

и OS продолжает убивать процесс при нечетных интервалах. Я не верю, что скрипт застрял на определенной операции, для того, чтобы пробираться сквозь петлю, требуется некоторое время.

петля выглядит так ..

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 минут, прежде чем врезаться. Я попробую запустить R из сценария оболочки, вызывающего ulimit только в этом сеансе терминала, и посмотреть, как это работает.

+0

Вы можете разместить петлю вы работаете? Я оставил сценарии, запущенные на ночь в интерактивном терминале на OSX Mountain Lion, не столкнувшись с этой проблемой. –

+0

Обновлено сообщение. – bfb

+0

Попробуйте запустить его в OS X GUI REPL, просто из любопытства? –

ответ

0

Tried ulimit ... Появляется, что у меня нет доступа, даже через sudo. Я получаю тот же результат от

ulimit -a -H 

до и после предоставления

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

, решаемые с помощью Debian виртуальной машины. Если у кого-то есть решение Mountain Lionic, сообщите нам об этом.

0

Беглый поиск Google для «Превышение лимита Cputime: 24» показывает мне, что это не является конкретной ошибкой R.

На основе цикла, который вы опубликовали, я предполагаю, что он превысит ограничение времени процессора на вызов queryDB из-за размера кусков, которые вы извлекаете из базы данных.

Я не уверен, если ваш from и to математика проверяет: В строках = 1e5, вы загружаете 1e11 идентификаторов, если уменьшить его так, строки = 1, вы загружаете 1E6 идентификаторы из таблицы.

В любом случае, попробуйте уменьшить размер фрагментов вы загружаете из базы данных, и посмотреть, если это помогает

+0

Включил мои i и j вокруг. Запросы занимают 3-5 секунд, и цикл работает несколько раз. Я не верю, что в запросах создается предел cputime, превышающий ошибку. – bfb

+0

Нечетные. Из вашего цикла есть три области, которые занимают незначительное количество времени: 1) Извлечение большого фрагмента из базы данных, 2) запись большой таблицы в файл и 3) rbind. –

+0

Также странно, что он хорошо работает на виртуальной машине Debian с долей ресурсов хоста. – bfb