我一直在玩redis数据库的R接口,以及foreach的doRedis并行后端.我有几个问题,帮助我更好地应用此工具:
我知道这是很多问题,但我一直遇到这样一种情况,即我对并行处理如何工作的有限理解阻碍了我实现它的能力.例如,我最近尝试在大型数据库上并行化计算,并发现自己将整个数据库传递到我的集群上的每个节点,这一操作完全破坏了我从并行化中获得的任何优势.
谢谢!
我通过doRedis在集群train
中的插入符号中运行该函数.在大多数情况下,它是有效的,但我经常在这种性质的最后得到错误:
error calling combine function:
<simpleError: obj$state$numResults <= obj$state$numValues is not TRUE>
Run Code Online (Sandbox Code Playgroud)
和
Error in names(resamples) <- gsub("^\\.", "", names(resamples)) :
attempt to set an attribute on NULL
Run Code Online (Sandbox Code Playgroud)
当我跑步时,traceback()
我得到:
5: nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method,
ppOpts = preProcess, ctrl = trControl, lev = classLevels,
...)
4: train.default(x, y, weights = w, ...)
3: train(x, y, weights = w, ...)
2: train.formula(couple ~ ., training.balanced, method = "nnet",
preProcess …
Run Code Online (Sandbox Code Playgroud) 当前最新版本的doRedis(1.1.0)存在一个错误,建议降级到1.0.5版本.但是,我无法在Windows XP上将1.0.5软件包安装到R 3.0.1中!
我试着按照" 安装旧版R包 " 的问题的答案:
url <- 'http://cran.r-project.org/src/contrib/Archive/doRedis/doRedis_1.0.5.tar.gz'
install.packages(url, contriburl=NULL, type="source")
# Warning message:
# package ‘http://cran.r-project.org/src/contrib/Archive/doRedis/doRedis_1.0.5.tar.gz’ is not available (for R version 3.0.1)
Run Code Online (Sandbox Code Playgroud)直接编译(Mark Butler的回答) - 对我来说也不起作用,甚至在卸载以前安装的版本之后,甚至在安装后都没有devtools
:
c:\Program Files\R\R-3.0.1\bin>R CMD INSTALL doRedis_1.0.5.tar.gz
* installing to library 'c:/Program Files/R/R-3.0.1/library'
* installing *source* package 'doRedis' ...
** package 'doRedis' successfully unpacked and MD5 sums checked
** libs
ERROR: compilation failed for package 'doRedis'
* removing 'c:/Program Files/R/R-3.0.1/library/doRedis' …
Run Code Online (Sandbox Code Playgroud)我有一个简单的设置如下:
Sys.info()
sysname release version nodename
"Windows" "7 x64" "build 7601, Service Pack 1" "OCTAVE-WS21"
machine login user effective_user
"x86-64" "kjain" "kjain" "kjain"
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 R 中的 doRedis 包来设置集群。我的机器上安装了“2.8.2101”版本的 Redis。首先,我尝试在本地计算机上(在 RStudio 中)运行作业:
library(doRedis)
registerDoRedis('jobs')
getDoParName()
#[1] "doRedis"
getDoParRegistered()
#[1] TRUE
startLocalWorkers(n = 2,queue = 'jobs')
getDoParWorkers()
#[1] 2
Run Code Online (Sandbox Code Playgroud)
我已检查 Redis 是否作为服务运行(redis-cli ping 返回“PONG”)
但是,当我尝试运行一个简单的 foreach 循环时,出现以下错误;即使我重新启动一切,我也会收到相同的错误:
workerIndex = foreach(i=1:100) %dopar% {i}
Run Code Online (Sandbox Code Playgroud)
sprintf("%s:%.0f.env",queue,ID) 中出错:格式“%.0f”无效;对字符对象使用格式 %s
显然,顺序版本工作得很好:
workerIndex = foreach(i=1:100) %do% {i}
workerIndex
#[[1]]
#[1] 1
#[[2]]
#[1] 2
etc.
Run Code Online (Sandbox Code Playgroud)
请帮忙!任何意见/指示表示赞赏。如果您需要更多信息,请告诉我。