rxPredict抛出SQL Server不存在或访问被拒绝错误

时间:2016-07-04 02:22:08

标签: sql-server r

我正在尝试MSDN上的SQL Server R服务教程 - 链接如下:

https://msdn.microsoft.com/en-us/library/mt629164.aspx

当我运行rxPredict命令时:

rxPredict(modelObject = logitObj, 
           data = featureDataSource, 
           outData = scoredOutput, 
           predVarNames = "Score", 
           type = "response",
           writeModelVars = TRUE, 
           overwrite = TRUE)

我收到以下错误:

======  SG01NB-4300092  ( process  1 ) has started run at  2016-07-04 09:43:35.00  ====== 

[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. 
Caught exception in file: CxAnalysis.cpp, line: 5682. ThreadID: 13560 Rethrowing. 
Caught exception in file: CxAnalysis.cpp, line: 5249. ThreadID: 13560 Rethrowing. 

[Microsoft][ODBC Driver Manager] Connection not open 

ODBC Error in SQLDisconnect 
Error in doTryCatch(return(expr), name, parentenv, handler) : 

[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. 
Calls: source ... tryCatch -> tryCatchList -> tryCatchOne -> doTryCatch -> .Call 

Execution halted 

Error in rxCompleteClusterJob(hpcServerJob, consoleOutput, autoCleanup) : 
  No results available - final job state: failed

我确保我的rxSetComputeContext(cc)正在使用可以创建表的有效用户登录。我也在我正在处理的本地计算机上安装SQL Server,因此它不会成为网络问题。

是否有人遇到此问题并成功运行此语句?

感谢您的回复和帮助!

伊恩

4 个答案:

答案 0 :(得分:0)

我发现问题在于outData = scoredOutput语句。如果我设置outData = NULL并将服务器上下文更改为local,我可以从rxPredict生成输出。

我决定用rxSetComputeContext执行rxPredict(" local")获取输出数据帧(outDF),然后使用rxDataStep将其保存回SQL Server(inData = outDF,outFile = scoredOutput,overwrite = TRUE)

rxSetComputeContext("local")

fds <- rxImport(featureDataSource)

outDF <- structure(list(Score = numeric(),
                        tipped = integer(),
                        passenger_count = numeric(),
                        trip_distance = numeric(),
                        trip_time_in_secs = numeric(),
                        direct_distance = numeric()), 
                   class = "data.frame")

outDF <- rxPredict(modelObject = logitObj, data = fds, outData = NULL, 
          predVarNames = "Score", type = "response",
          writeModelVars = TRUE, overwrite = TRUE)  

# reset the compute context to the server and persist the df result to the table
rxSetComputeContext(cc)

rxDataStep(inData = outDF, outFile = scoredOutput, overwrite=TRUE)

如果有人有更好的方法,请分享并告诉我们!

由于

伊恩

答案 1 :(得分:0)

确保您已提供工作人员/ Launchpad帐户(用于运行R脚本)的权限,以代表您登录SQL Server。有关详细信息,请参阅Enable Implied Authentication for Launchpad Accounts

答案 2 :(得分:0)

我很久以来一直在处理这个错误。奇怪的是,脚本在我的一个SQL Server 2016虚拟机上运行,​​而不是在另一个上运行。所以我比较了两台服务器的属性,并确保我没有忘记一些安装后的程序。

部分归功于@ArunGurunathan,我在寻找这些差异时发现了一个异常现象。打开SQL Server计算机本身,并查看防火墙设置 - 我发现有一条规则阻止了对R本地用户帐户的网络访问。我禁用了该规则,我的脚本(rxPredict)运行没有任何错误。

尝试让我知道它是否适合您。

enter image description here

答案 3 :(得分:0)

我有同样的问题成功&amp;错误消息: enter image description here

未授权outData方法写入SQL DB, 但通过启用SQLRUser 以及对相关数据库的写访问权来修复它。

修复已应用 enter image description here

基本上,您正在为启动板帐户启用隐含身份验证

专门从控制面板导航到用户帐户,您将看到包含20个帐户的SQLR用户组。

在具有写访问权限的服务器和数据库表上允许这些。

那应该看对你了。祝你好运