Назначение пути к файлу на хосте работника при использовании doParallel в R

Я работаю на одной машине с 8 ядрами. Я хочу войти stdout и stderr в файл журнала, используя опцию outfile в makeCluster

cl = makeCluster(detectCores() - 1,      
                 outfile = "log.txt")

Приведенный выше код сохраняет файл журнала в рабочем каталоге. Мне было интересно, как изменить путь к файлу для outfile, чтобы сохранить в любом заданном пути. Например:

cl = makeCluster(detectCores() - 1,     
                 outfile = "\\\\logfolder\\log.txt")

Когда я указал путь к файлу, я не получил никакого файла журнала (ни в рабочем каталоге, ни по указанному пути). В документации указано, что мне нужно изменить путь к файлу на хосте рабочего.

outfile: Куда направить выходные данные соединения stdout и stderr от рабочих. "" указывает на отсутствие перенаправления (которое может быть полезно только для рабочих на локальной машине). По умолчанию /dev/null (nul: в Windows). Другая возможность - путь к файлу на хосте работника. Файлы будут открываться в режиме добавления, так как все работники регистрируются в одном файле.

Честно говоря, я не очень хорош в терминологии параллельных вычислений, и мне было интересно, не могли бы вы помочь мне с изменением пути к файлу. Спасибо!

1 ответ

Это работает для меня, чтобы создать 10 отдельных файлов по фиктивному пути - C:/temp/temp/ основанный на i, Вы можете попробовать подобный подход.

library(parallel)
cl <- makeCluster(detectCores()-1)

parallel_sink <- function(out) {
    O <- file(out, "w")
    sink(O)
    return(O)
}

clusterExport(cl, c("parallel_sink"))

parLapply(
    cl, 
    1:10, 
    function(i) {
        out <- paste0("C:/temp/temp/", i, ".txt")
        worker_out <- parallel_sink(out)
        write(paste0("prints to stdout - ", i), stdout())
        close(worker_out)   
    }
)
stopCluster(cl)
rm(cl)
Другие вопросы по тегам