我使用split()
对一个包含1.3百万行和20列的数据帧进行分区,以便使用parLapply()
并行调用每个分区中的函数。我按两列分割/分区,它们都是字符类型。看起来有大约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 Data Integration(PDI)中有等效的代码,该程序在30秒内运行(针对整个程序,而不仅仅是“split”代码)。 我并不指望R能够达到那种性能,但希望它最坏情况下能够在10-15分钟内完成。
主要问题:是否有更好的拆分替代方案? 我还尝试过ddply()
与.parallel = TRUE
,但它也运行了一个多小时,并且从未完成。
split()
代码,等了将近一个小时,但它从未完成。 - argoneus