Распараллеливание: параллельный пакет вместо mclapply

Я пытаюсь преобразовать этот код в тот, который можно выполнить в Windows:

numCores <- detectCores()
results <- mclapply(seq(1, 500), function(file, fID){
  myData <- fread(file.path(dirPath, fID, paste0(file, ".csv")))
  return(cbind(myData, rep(file, nrow(myData))))
}, mc.cores = numCores, fID = 1)

На основе этого руководства я написал следующий код...

ОБНОВЛЕНИЕ. Ниже приведен правильный код:

getAllMyData <- function(numCores,folderID)
{
  dirPath = paste0("D:/home/", folderID, '/')
  cl <- makeCluster( 4 )
  allTrips = parLapply(cl, 1:200, function(z){
    myData <- read.csv(paste0(dirPath, z, ".csv"))
    return(cbind(myData , rep(z, nrow(myData))))
  })
  stopCluster(cl)  
  return(allTrips)
}

numCores <- detectCores()
allMyData <- getAllMyData(numCores,1)

person Klausos Klausos    schedule 12.01.2015    source источник


Ответы (1)


Ваш первый код вызывает функцию

function(file, fID)

Ваш второй код, напротив, использует

function(dirPath,fID)

Это ошибка.

person Konrad Rudolph    schedule 12.01.2015
comment
Спасибо. Я обновил свой пост, где разместил правильный код. Однако странно, что время выполнения почти совпадает с сериализованным кодом. - person Klausos Klausos; 12.01.2015
comment
@KlausosKlausos Это не так уж удивительно: чтение данных с диска (что составляет большую часть того, что делает ваш код) не может быть эффективно распараллелено, потому что это операция, связанная с вводом-выводом, а не с привязкой к ЦП. - person Konrad Rudolph; 15.01.2015