首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RevoScaleR函数故障转移Linux上的Rserve

RevoScaleR函数故障转移Linux上的Rserve
EN

Stack Overflow用户
提问于 2017-08-02 04:05:09
回答 1查看 128关注 0票数 0

我正在尝试在Microsoft客户端上运行Rserve,并通过网络连接执行RevoScaleR函数。我可以运行非RevoScaleR函数,但是RevoScaleR似乎有一些兼容性问题。

我可以启动一个服务器,连接,并让它执行不涉及RevoScaleR的代码:

代码语言:javascript
复制
> library(RSclient)
> rsc <- RSconnect(port=30120)
> RSeval(rsc, '
+ model <- lm(dist~speed, cars)
+ predict(model, cars)')
        1         2         3         4         5         6         7         8
-1.849460 -1.849460  9.947766  9.947766 13.880175 17.812584 21.744993 21.744993
        9        10        11        12        13        14        15        16
21.744993 25.677401 25.677401 29.609810 29.609810 29.609810 29.609810 33.542219
       17        18        19        20        21        22        23        24
33.542219 33.542219 33.542219 37.474628 37.474628 37.474628 37.474628 41.407036
       25        26        27        28        29        30        31        32
41.407036 41.407036 45.339445 45.339445 49.271854 49.271854 49.271854 53.204263
       33        34        35        36        37        38        39        40
53.204263 53.204263 53.204263 57.136672 57.136672 57.136672 61.069080 61.069080
       41        42        43        44        45        46        47        48
61.069080 61.069080 61.069080 68.933898 72.866307 76.798715 76.798715 76.798715
       49        50
76.798715 80.731124

但是如果我尝试运行RevoScaleR函数,我会得到一个“远程评估失败”的错误:

代码语言:javascript
复制
> RSeval(rsc, '
+ model <- rxLinMod(dist~speed, cars)
+ rxPredict(model, cars)')
Error in RSeval(rsc, "\nmodel <- rxLinMod(dist~speed, cars)\nrxPredict(model, cars)") :
  remote evaluation failed

而Rserve会产生以下错误输出:

代码语言:javascript
复制
> Error in doTryCatch(return(expr), name, parentenv, handler) :
  ignoring SIGPIPE signal
Error in doTryCatch(return(expr), name, parentenv, handler) :
  Write error: expected 8 got

奇怪的是,如果我将Rserve置于调试模式,RevoScaleR似乎会断断续续地工作。如果我在Windows上的Microsoft R Server上运行Rserve,它也可以工作,但Windows上的Rserve受到很大限制。

我的怀疑之一是,Rserve的派生可能会导致问题,但我能找到的关于RevoScaleR的唯一与派生相关的警告是关于我没有启用的thread pool feature。我觉得与BxlServer的连接可能也是一个问题-- Rserve似乎不会在fork上创建一个新的BxlServer --但我找不到任何关于这方面的文档,我甚至不知道如果您没有连接到SQL Server,是否涉及到BxlServer。GDB显示SIGPIPE发生在SendAndReceiveBxlFnToServer中,这听起来像是BxlServer参与其中。

我使用的是SLES11 SP3和微软R Client 3.3.3。

Rserve是否与RevoScaleR不兼容?如果它是兼容的,我是否需要在常规R上执行任何额外的设置才能使其正常工作?

EN

回答 1

Stack Overflow用户

发布于 2017-08-02 05:17:18

它探讨了实现细节,但使用RevoScaleR:::startBxlServer()手动启动BxlServer似乎可以解决问题:

代码语言:javascript
复制
RSeval(rsc, 'RevoScaleR:::startBxlServer()')

Rserve的派生机制似乎与BxlServer的交互很差--至少是普通的Rserve。我不确定DeployR分支是做什么的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45446771

复制
相关文章

相似问题

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