【问题标题】:Cannot load library data.table to R parallel无法将库 data.table 加载到 R 并行
【发布时间】:2018-02-02 03:23:24
【问题描述】:

当我使用以下代码将库 data.table 加载到 cpu 集群时,R 会引发错误。但是 data.table 包安装在 R 上,并且在并行代码之外使用时可以正常工作。

no_cores <- detectCores() - 1
cl <- makeCluster(no_cores,outfile="out.txt")
clusterEvalQ(cl, library(data.table))

错误:-

clusterEvalQ(cl, library(data.table)) checkForRemoteErrors(lapply(cl, recvResult)) 中的错误: 3个节点产生错误;第一个错误:没有名为“data.table”的包

【问题讨论】:

  • 你安装包了吗?简单的library(data.table) 工作吗?
  • 是的。我可以在并行代码之外使用这个包而没有问题
  • 此时无法重现该错误。尝试更新 R 和包,重新启动会话等。
  • 如果你使用parallelMapgithub.com/berndbischl/parallelMap你可以通过parallelLibrary('data.table')加载库
  • 看起来集群工作人员没有从与主 R 进程相同的包库中加载包。确保clusterEvalQ(cl, .libPaths()) 输出与.libPaths() 相同的库路径。如果不是,cl &lt;- makeCluster(no_cores, outfile = "out.txt", manual = TRUE) 输出什么?

标签: r parallel-processing data.table


【解决方案1】:

基于 HenrikB 在 cmets 中所说的内容,我通过将 .libPaths() 调用添加到 clusterEvalQ() 来解决这个问题:

.libPaths("C:/programs/rlib")
library(parallel)
no_cores<-detectCores()-1

cl<-makeCluster(no_cores)
#this is needed to see the package
clusterEvalQ(cl, .libPaths("C:/programs/rlib"))

# I'm using a function that uses the stringdist library
clusterEvalQ(cl, library(stringdist))

#You need to load your data into the cluster also
clusterExport(cl, "unmatched")
clusterExport(cl, "matched")

#now we're going to run it, amatch is a function in the stringdist lib

parLapply(cl, unmatched,function(x) amatch(x,matched, maxDist = Inf))

【讨论】:

  • 知道如何通过clusterEvalQ 的相对路径传递自定义.libPaths() 吗?我似乎找不到方法,我需要它来实现代码的可重复性,例如也可以在其他计算机上运行,​​并具有不同的库目录绝对路径。
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 2019-09-19
  • 1970-01-01
  • 2016-10-01
  • 2015-05-23
  • 2017-03-22
  • 2019-10-19
  • 2012-11-09
相关资源
最近更新 更多