我正在尝试在我的Windows计算机上并行运行predict()
。这对于较小的数据集可以工作,但是随着每个进程创建新的数据框的副本,它的扩展性不佳。是否有一种方法可以在不创建临时副本的情况下并行运行?
我的代码(仅对这个原始代码进行了少量修改):
library(foreach)
library(doSNOW)
fit <- lm(Employed ~ ., data = longley)
scale <- 100
longley2 <- (longley[rep(seq(nrow(longley)), scale), ])
num_splits <-4
cl <- makeCluster(num_splits)
registerDoSNOW(cl)
split_testing<-sort(rank(1:nrow(longley))%%num_splits)
predictions<-foreach(i= unique(split_testing),
.combine = c, .packages=c("stats")) %dopar% {
predict(fit, newdata=longley2[split_testing == i, ])
}
stopCluster(cl)
我正在使用简单的数据复制进行测试。在 scale
为 10 或 1000 时,它可以运行,但我希望能够运行 scale <- 1000000
- 数据框中有 16M 行(根据 pryr
的 object_size()
显示,数据框大小为 1.86GB)。请注意,如果必要,我也可以使用 Linux 机器,如果这是唯一的选择。