我有一个包含两个 data.table 对象的列表。给出一个想法,一个表有 400,000 行和 7 个变量,另一个有 750,000 行和 12 个变量。这两个表没有相同的列。我对它们做了很多修改(每个步骤都有不同的步骤)。修改步骤包括计算总和、查找汇总值的百分位数、每组中的案例数、唯一长度等(每个步骤超过 20 步)。我用data.table
这些步骤的包。但是,我发现每个步骤都执行大约 20 个步骤(总共 > 40 个步骤)需要一些时间。我想知道如何使用并行处理来加快速度。我认为可以并行处理这些步骤,因为它们是在列表的不同组件上执行的。我进行了彻底的谷歌搜索以集思广益,但是,我没有找到有用的线索。有人做过吗?请提供一些启示,所以我将非常感激。谢谢
到目前为止,我已经做了这么多。Result
是包含两个 data.table 对象的列表。fun1 和 fun2 包含了我需要对每个 data.table 对象执行的一组步骤。性能方面我还没有看到任何收益(可能是由于开销?我不知道)。
munge_data<-function(fun1=prep_data1, fun2=prep_data2, result=result){
library(foreach)
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
fun_munge<-list(quote(prep_data1(result)), quote(prep_data2(result)))
finatest<-foreach (i=1:2, .packages = "data.table") %dopar% {
result<-result
prep_data1<-fun1
prep_data2<-fun2
eval(fun_munge[[i]])
}
stopCluster(cl)
finatest
}