R Parallel Package:clusterExport 到每个单独的核心而不是一个大对象到所有核心

R Parallel Package: clusterExport to each individual core rather than one large object to all cores

我正在使用 Parallel Package 来节省我在 R 中的一些时间。通常我会导出我尝试使用 clusterExport 和 运行 相关函数进行计算的任何对象。但是,这次我要处理一个非常大的对象 (10+GB),甚至创建一个小集群也会使用大量 RAM。我正在做的计算只需要 R 的每个副本的 10 GB 对象的一部分。我想知道是否有一种方法可以使用 clusterExport 只将相关的半 GB 左右导出到 R 的每个副本。来自什么我可以告诉 clusterExport 总是将整个对象发送到每个副本,所以如果有解决办法,请告诉我。

您可以在下面的示例中看到,我将 data.frame x 存储在 R 的每个副本中。在这种情况下,我的目标是拥有 10 个不同的数据集 x1-x10 并将 x1 加载到第一个副本, x2 到第二个,依此类推。如果还有其他方法可以有效地做到这一点,请也告诉我。

library('doParallel')
x <- data.frame(a=1:10,b=1:10)
test <- function(y) {
  return(x$a[y]+x$b[y])
}
cl <- makeCluster(10)
registerDoParallel(cl)
clusterExport(cl,list('test','x'))
test1 <- parLapply(cl,1:10,fun=test)
stopCluster(cl)

几天后我想出了一个解决方案。我想出的解决方案是将 data.frame 的每个部分保存在单独的 csv 文件中。然后在每个虚拟 R 会话中,我读取相关的 csv 文件,因此每个 R 会话只包含计算所需的数据。