【发布时间】:2013-10-03 00:08:42
【问题描述】:
我正在使用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,但它也运行了一个多小时并且从未完成。
【问题讨论】: