jpmml导出java文件,使用JPMML评估SAS生成的PMML文件时出现FMTWIDTH错误

I have a PMML generated from SAS Miner that I can't get properly evaluated using JPMML 1.1.4. JPMML 1.1.4 says it supports PMML 4.2 and the PMML says it is PMML version 4.2.

Is the FMTWIDTH in the below function "SAS-EM-String-Normalize" proper PMML syntax?

Any ideas why I can't evaluation this function using JPMML?

I have the function in my TransformationDictionary that looks like,

1

FMTWIDTH

And I get the following exception,

Exception in thread "main" org.jpmml.evaluator.TypeCheckException:

Expected INTEGER, but got STRING (FMTWIDTH) at

org.jpmml.evaluator.FieldValue.asInteger(FieldValue.java:125) at

org.jpmml.evaluator.FunctionRegistry$36.evaluate(FunctionRegistry.java:463)

at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:38)

at

org.jpmml.evaluator.ExpressionUtil.evaluateApply(ExpressionUtil.java:203)

at

org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91)

at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:76)

at org.jpmml.evaluator.FunctionUtil.evaluate(FunctionUtil.java:43)

at

org.jpmml.evaluator.ExpressionUtil.evaluateApply(ExpressionUtil.java:203)

at

org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91)

at

org.jpmml.evaluator.ExpressionUtil.evaluateApply(ExpressionUtil.java:188)

at

org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:91)

at

org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:58)

at

org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:45)

at

org.jpmml.evaluator.ExpressionUtil.evaluateMapValues(ExpressionUtil.java:169)

at

org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:87)

at

org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:58)

at

org.jpmml.evaluator.ExpressionUtil.evaluate(ExpressionUtil.java:45)

at

org.jpmml.evaluator.RegressionModelEvaluator.evaluateRegressionTable(RegressionModelEvaluator.java:150)

at

org.jpmml.evaluator.RegressionModelEvaluator.evaluateClassification(RegressionModelEvaluator.java:107)

at

org.jpmml.evaluator.RegressionModelEvaluator.evaluate(RegressionModelEvaluator.java:57)

at

org.jpmml.evaluator.ModelEvaluator.evaluate(ModelEvaluator.java:65)

at

ValidPMMLTesterRandomScores.randomEvaluation(ValidPMMLTesterRandomScores.java:116)

at

ValidPMMLTesterRandomScores.printModelInformation(ValidPMMLTesterRandomScores.java:94)

at

ValidPMMLTesterRandomScores.readModelFromFile(ValidPMMLTesterRandomScores.java:142)

at

ValidPMMLTesterRandomScores.main(ValidPMMLTesterRandomScores.java:160)

解决方案

According to the formal definition of the PMML built-in function "substring", it requires a string argument and two integer arguments. The SAS EM generated PMML code attempts to invoke this function with a string argument, an integer argument, and another string argument substring($AnyCInput, 1, "FMTWIDTH").

This PMML fragment can be fixed by accessing the value of the "FMTWIDTH" parameter using the FieldRef element:

1

In conclusion, JPMML is a correct and SAS EM is wrong.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值