【问题标题】:loading files in parallel not working with foreach + data.table并行加载文件不适用于 foreach + data.table
【发布时间】:2013-01-17 00:33:04
【问题描述】:

我想结合使用foreachdata.table (v.1.8.7) 来加载文件并绑定它们。 foreach 未并行化,并返回警告...

write.table(matrix(rnorm(5e6),nrow=5e5),"myFile.csv",quote=F,sep=",",row.names=F,col.names=T) 
library(data.table); 
#I use fread from data.table 1.8.7 (dev) for performance and useability
DT = fread("myFile.csv") 

现在假设我有 n 个要加载和行绑定的文件,我想将其并行化。 (我在 Windows 上,所以没有分叉)

allFiles = rep("myFile.csv",4) # you can change 3 to whatever

使用 lapply

f1 <- function(allFiles){
    DT <- lapply(allFiles, FUN=fread) #will load sequentially myFile.csv 3 times with fread
    DT <- rbindlist(DT);
    return(DT);
}

使用并行(R 的一部分作为 2.14.0)

library(parallel)
f2 <- function(allFiles){
    mc <- detectCores(); #how many cores?
    cl <- makeCluster(mc); #build the cluster
    DT <- parLapply(cl,allFiles,fun=fread); #call fread on each core (well... using each core at least)
    stopCluster(cl);
    DT <- rbindlist(DT);
    return(DT);
}

现在我想使用 foreach

library(foreach)
f3 <- function(allFiles){
    DT <- foreach(myFile=allFiles, .combine='rbind', .inorder=FALSE) %dopar% fread(myFile)
    return(DT);
}


这里有一些基准确认我不能让 foreach 工作

system.time(DT <- f1(allFiles));
utilisateur     systÞme      ÚcoulÚ
      34.61        0.14       34.84
system.time(DT <- f2(allFiles));
utilisateur     systÞme      ÚcoulÚ
       1.03        0.40       24.30    
system.time(DT <- f3(allFiles));
executing %dopar% sequentially: no parallel backend registered
utilisateur     systÞme      ÚcoulÚ
      35.05        0.22       35.38

【问题讨论】:

  • 您阅读警告了吗?
  • 当然了,但我该如何解决呢?该小插曲没有提供有关要采取的任何进一步步骤的信息......看起来它应该开箱即用
  • 好的!!!我从没有提到那些东西的同一个人那里得到了一篇论文,好的,谢谢!

标签: r foreach parallel-processing data.table


【解决方案1】:

只是为了得到这个答案:

正如警告消息告诉您的那样,foreach 没有注册并行后端。阅读this vignette 了解如何做到这一点。

小插图中的简单示例:

library(doParallel) 
cl <- makeCluster(3) 
registerDoParallel(cl) 
foreach(i=1:3) %dopar% sqrt(i) 

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 2015-08-21
    • 2011-10-11
    • 2018-04-08
    • 2018-12-07
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多