首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >并行加载不使用foreach + data.table的文件

并行加载不使用foreach + data.table的文件
EN

Stack Overflow用户
提问于 2013-02-01 16:24:20
回答 1查看 2.6K关注 0票数 4

我想使用foreachdata.table (v.1.8.7)一起加载文件并绑定它们。foreach没有并行化,并返回一个警告..。

代码语言:javascript
运行
复制
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个文件要加载和rowbind,我想解析它。(我在Windows上,所以没有分叉)

代码语言:javascript
运行
复制
allFiles = rep("myFile.csv",4) # you can change 3 to whatever

使用

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
library(foreach)
f3 <- function(allFiles){
    DT <- foreach(myFile=allFiles, .combine='rbind', .inorder=FALSE) %dopar% fread(myFile)
    return(DT);
}

这里有一些基准证明了我无法降低foreach的工作能力

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-01 18:33:48

只是为了得到答案:

正如警告消息告诉您的那样,没有为foreach注册的并行后端。阅读这个小故事来学习如何做到这一点。

简单的例子来自于小插曲:

代码语言:javascript
运行
复制
library(doParallel) 
cl <- makeCluster(3) 
registerDoParallel(cl) 
foreach(i=1:3) %dopar% sqrt(i) 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14650662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档