2013-11-11 3 views
0

Я использую следующий кодЗагрузка данных из SQL в R

ORT<-sqlQuery(channel, "Select ort FROM test") 
ORT<-ORT[,c("ort")] 
ORT<-as.list(ORT) 
ORT <- parLapply(cl,ORT,function(ORT) cleanup(ORT)) 
sqlSave(channel, ORT,tablename="table_name1") 

Сначала я загружаю столбец моей базы данных Sql в R, который работает отлично. Следующая вещь: я хочу запустить функцию, используя параллельный пакет. Здесь первая проблема, ORT должен быть символьным вектором, но Sql импортирует вектор в качестве фрейма данных. Есть ли быстрый способ конвертировать? Так как вектор содержит 10 миллионов записей.

Следующая проблема: как сохранить вектор данных обратно в базу данных, моя команда sqlSave не работает!

+0

Принуждение к вектору перед вызовом его из db? –

ответ

0

Когда вы делаете ORT<-ORT[,c("ort")], я подозреваю, что R выделяет новую память и копирует содержимое ORT$ort. Если вы просто сохраните фрейм данных и пройдете ORT$ort до parLapply, вы можете пропустить этот шаг. (Также обратите внимание, что вам не нужен шаг as.list. parLapply принимает векторы.)

Я был бы удивлен, если бы это была медленная часть вашего анализа. Чтение и запись в базы данных обычно занимает гораздо больше времени, чем выделение новых векторов.

Если вы хотите получить результат в качестве вектора для использования с sqlSave, используйте parSapply вместо parLapply.

Смежные вопросы