2

我正在尝试在集群内建立文件连接(使用并行)。虽然它在全局环境中正常工作,但在集群成员中使用时会出现错误消息(请参阅下面的脚本)。我错过了什么吗?

有什么建议吗?

谢谢,

# This part works
#----------------
cat("This is a test file" , file={f <- tempfile()})
con <- file(f, "rt")


# Doing what I think is the same thing gives an error message when executed in parallel
#--------------------------------------------------------------------------------------

library(parallel)
cl <- makeCluster(2)

## Exporting the object f into the cluster

clusterExport(cl, "f")
clusterEvalQ(cl[1], con <- file(f[[1]], "rt"))
 #Error in checkForRemoteErrors(lapply(cl, recvResult)) :
 # one node produced an error: cannot open the connection


## Creating the object f into the cluster

clusterEvalQ(cl[1],cat("This is a test file" , file={f <- tempfile()}))
clusterEvalQ(cl[1],con <- file(f, "rt"))
 #Error in checkForRemoteErrors(lapply(cl, recvResult)) :
 # one node produced an error: cannot open the connection 


############ Here is my sessionInfo() ###################
# R version 3.3.0 (2016-05-03)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 7 x64 (build 7601) Service Pack 1
#
# locale:
# [1] LC_COLLATE=French_Canada.1252  LC_CTYPE=French_Canada.1252   
# [3] LC_MONETARY=French_Canada.1252 LC_NUMERIC=C                  
# [5] LC_TIME=French_Canada.1252    
#
# attached base packages:
# [1] stats     graphics  grDevices utils     datasets  methods   base 
# 
4

1 回答 1

1

尝试更改代码以返回一个NULL而不是创建的连接对象:

clusterEvalQ(cl[1], {con <- file(f[[1]], "rt"); NULL})

连接对象不能在 master 和 worker 之间安全地发送,但是这种方法避免了这种情况。

于 2016-05-29T21:49:27.230 回答