我正在对数据框进行分区split()
,以便用于parLapply()
并行调用每个分区上的函数。数据框有 130 万行和 20 列。我按两列拆分/分区,都是字符类型。看起来有 ~47K 唯一 ID 和 ~12K 唯一代码,但并非每一对 ID 和代码都匹配。得到的分区数约为 250K。这是split()
行:
system.time(pop_part <- split(pop, list(pop$ID, pop$code)))
然后将分区输入parLapply()
如下:
cl <- makeCluster(detectCores())
system.time(par_pop <- parLapply(cl, pop_part, func))
stopCluster(cl)
我已经让split()
代码单独运行了将近一个小时,但它没有完成。我可以仅按 ID 进行拆分,这需要大约 10 分钟。此外,R studio 和工作线程正在消耗约 6GB 的 RAM。
我知道分区数的原因是我在 Pentaho 数据集成 (PDI) 中有等效的代码,它在 30 秒内运行(对于整个程序,而不仅仅是“拆分”代码)。我不希望 R 有这种类型的性能,但最坏的情况下可能会在 10 到 15 分钟内完成。
主要问题:有没有比拆分更好的选择?我也尝试ddply()
过.parallel = TRUE
,但它也运行了一个多小时并且从未完成。