我已经对一些拆分数据帧和并行化的方法进行了基准测试,以了解它们对大型数据帧的有效性。这可能会帮助您处理 20M 行数据帧,并且不需要另一个包。
结果在这里。说明如下。

这表明对于大型数据帧,最好的选择是(不是最快的,但有一个进度条):
library(doSNOW)
library(itertools)
# if size on cores exceeds available memory, increase the chunk factor
chunk.factor <- 1
chunk.num <- kNoCores * cut.factor
tic()
# init the cluster
cl <- makePSOCKcluster(kNoCores)
registerDoSNOW(cl)
# init the progress bar
pb <- txtProgressBar(max = 100, style = 3)
progress <- function(n) setTxtProgressBar(pb, n)
opts <- list(progress = progress)
# conduct the parallelisation
travel.queries <- foreach(m=isplitRows(coord.table, chunks=chunk.num),
.combine='cbind',
.packages=c('httr','data.table'),
.export=c("QueryOSRM_dopar", "GetSingleTravelInfo"),
.options.snow = opts) %dopar% {
QueryOSRM_dopar(m,osrm.url,int.results.file)
}
# close progress bar
close(pb)
# stop cluster
stopCluster(cl)
toc()
注意
可以在此处找到有关我比较的其他选项的更多信息。
其中一些答案可能适合您,尽管它们与分布式 parlapply 无关,我已将其中一些包含在我的基准测试选项中。