RevoScaleR函数在Linux

时间:2017-08-01 20:05:09

标签: r rserve microsoft-r

我尝试在Microsoft R Client上运行Rserve并通过网络连接执行RevoScaleR功能。我可以运行非RevoScaleR函数,但RevoScaleR似乎存在某种兼容性问题。

我可以启动Rserve,连接,并让它执行不涉及RevoScaleR的代码:

> 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功能,我会得到一个&#34;远程评估失败&#34;错误:

> 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产生以下错误输出:

> 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上运行Rserve on Microsoft R Server,它也可以工作,但Windows上的Rserve受到很大限制。

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

我在SLES 11 SP3和Microsoft R Client 3.3.3上。

Rserve与RevoScaleR不兼容吗?如果它兼容,我是否需要执行任何额外的设置,而不是使用常规R来使其工作?

1 个答案:

答案 0 :(得分:0)

它正在探讨实现细节,但是使用[['InteractionId', 'QueryId', 'Score', 'StartOffsetInMs', 'EndOffsetInMs', 'SpeakerRole', 'QueryIdentity', 'SpeakerId']] [['InteractionId', 'QueryId', 'Score', 'StartOffsetInMs', 'EndOffsetInMs', 'SpeakerRole', 'QueryIdentity', 'SpeakerId'], ['34118470', '27', '45.63345', '89900', '90980', 'U', 'e54fd492-8877-4534-997b-9dbe9a8fbd74', '']] Inserting data 手动启动BxlServer似乎可以解决问题:

RevoScaleR:::startBxlServer()

Rserve的分叉机制似乎与BxlServer的交互性很差 - 至少是vanilla Rserve。我不确定DeployR fork的作用。