我已经在R中创建了一个模型,并将其发布到SQL Server表中,并通过将其调用到SQL Server中对其进行了验证。 但是,我无法使用该模型对新数据进行预测。 这是我的脚本:
DROP PROCEDURE IF EXISTS predict_risk_new_data;
GO
CREATE OR ALTER PROCEDURE predict_risk_new_data (@q nvarchar(max))
AS
BEGIN
DECLARE @model varchar(30) = 'risk_rxLogit'
DECLARE @rx_model varbinary(max) = (SELECT model FROM rx_models WHERE model_name = @model);
EXEC sp_execute_external_script
@language = N'R'
,@script = N'
require("RevoScaleR");
input_data = InputDataSet;
model <- unserialize(rx_model);
prediction <- rxPredict(model, input_data, writeModelVars = TRUE);
OutputDataSet <- cbind(predictions[1], predictions[2]);'
,@input_data_1 = @q
,@parallel = 1
,@params = N'@rx_model varbinary(max), @r_rowsPerRead int'
,@input_data_1_name = N'InputDataSet'
,@rx_model = @rx_model
,@r_rowsPerRead = 100
WITH result sets (("Risk_Pred" float, "ZIP" int));
END
GO;
/*
EXEC predict_risk 'SELECT TOP 100 [ZIP], [Week], [Age], [Risk] FROM dbo.Risk'
*/
以下是错误输出:
消息39004,级别16,状态20,行223发生“ R”脚本错误 在使用HRESULT执行'sp_execute_external_script'期间 0x80004004。消息39019,第16级,状态2,第223行外部脚本 发生错误:unserialize(rx_model)错误:读取错误调用: 源-> withVisible->评估->评估->反序列化
执行错误。检查输出以获取更多信息。错误中 eval(expr,envir,enclos):执行错误。检查输出 了解更多信息。调用:来源-> withVisible->评估->评估-> 。通话执行停止
SQL Server中R / ML的新增功能,将不胜感激。 预先感谢。
答案 0 :(得分:0)
当我做这样的事情时,我不得不将as.raw添加到模型中。 试试这个
model <- unserialize(as.raw(rx_model));