2016-06-17 10 views
1

Мне нужно загрузить несколько файлов формы в мою сессию R. В настоящее время я загружаю каждый файл формы отдельно. Это работает, но это занимает много времени и использует только 15% моего доступного процессора. Недавно я попытался загружая файлы формы, используя ForEach и DoParallel:ForEach и DoParallel используют всю мою оперативную память?

require(foreach) 
require(doParallel) 
require(rgdal) 
files <- c(
    "AHVENANMAA/AHVENANMAA", 
    "ETELA-KARJALA/ETELA-KARJALA", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_1", 
    "ETELA-POHJANMAA/ETELA-POHJANMAA_2", 
    "ETELA-SAVO/ETELA-SAVO_1" 
) 
registerDoParallel(cores = 8) 
listOfCurrentProvinces <- (
    foreach(
     x = files, 
     .packages = "rgdal", 
     .inorder = FALSE 
    ) %dopar% 
     readOGR(x, layer = "DR_LINKKI") 
) 

Этот метод работает и очень быстро (он использует 100% моего процессора). Тем не менее, он использует слишком много памяти, особенно когда я повторяю этот процесс много раз. Есть ли способ, которым я могу использовать ForEach и DoParallel без какого-либо серьезного удара памяти? Моя машина имеет 8 процессоров (4 физических и 4 логических) и имеет 16 ГБ оперативной памяти.

+0

Прочитать [ЭТО] (http://stackoverflow.com/questions/37750937/doparallel-package-foreach-does-not-work-for-big-iterations-in-r) – 989

ответ

0

Я сделал пару вещей, которые, кажется, помогают.

1) Зарегистрируйте только количество ядер ONCE с помощью команды registerDoParallel.

2) Используйте gc() после каждой итерации.

Прежде чем я внедрил эти изменения, моя память взорвалась после всего 4 (из 21) итераций. Теперь я выполнил 6 итераций и комфортно сижу при использовании 50% памяти. Объем доступной ОЗУ остается постоянным около 15 минут.