并行包中大型对象的ClusterExport

时间:2018-09-24 09:51:29

标签: r parallel-processing

我有一个6.5Gb的数据表。我想使用ParLapply在循环中进行一些并行计算(例如运行回归)。此刻,当我在并行包中尝试clusterExport时,它会花费很多时间(我从未见过它完成导出)。

我有16个内核和64Gb RAM。正常吗如何加快大数据表的导出?

num_cores = (detectCores(all.tests = FALSE, logical = TRUE) - 2)
workers <- parallel::makePSOCKcluster(num_cores, useXDR=F)
for(pck_name in required.pck){ 
  clusterExport(workers, c("pck_name"), envir = environment())
  clusterEvalQ(workers, library(pck_name, character.only=TRUE))
}

# Bit that freezes up 
clusterExport(workers, varlist = c("big_data_table"), envir 
= environment()) 

1 个答案:

答案 0 :(得分:1)

考虑将其保存到磁盘(使用savesaveRDS),而不是导出内存中的对象,然后将其加载到工作进程中。

还要注意,无论采用哪种方式,最终都会在每个工作进程中得到一个单独的6.5GB对象。具有16个x2内核用于超线程(您正在与detectCores(logical=TRUE)一起使用),即32-2 = 30个进程。因此,实际上所有这些数据表都没有足够的内存。