如何在SQL Server中反序列化R模型以进行预测?

时间:2018-10-11 08:32:32

标签: r sql-server

我已经在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的新增功能,将不胜感激。 预先感谢。

1 个答案:

答案 0 :(得分:0)

当我做这样的事情时,我不得不将as.raw添加到模型中。 试试这个

    model <- unserialize(as.raw(rx_model));