首页 > 解决方案 > 错误的参数“男性”:org.apache.hadoop.hive.ql.metadata.HiveException | HiveUDF 中的 Drools KieSession

问题描述

我正在尝试使用以下代码在评估方法中开发一个带有drools规则引擎调用的UDF:

Person person = new Person(gender);

    KieServiceSerializer kszObj = new KieServiceSerializer();

    KieServices ks = kszObj.getKieServices();
    KieContainer kContainer = ks.getKieClasspathContainer();
    KieSession kSession = kContainer.newKieSession("ksession-rules");   //this line is causing error: Wrong arguments '"Male"': org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.udf_drools_poc.UDFDrools.evaluate(java.lang.String)

    kSession.insert(person);
    kSession.fireAllRules();

Person 和 KieServiceSerializer 都是序列化的。

此代码在本地运行良好(从 IDE 执行时),但通过 hive 执行时抛出以下错误:

Wrong arguments '"Male"': org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.udf_drools_poc.UDFDrools.evaluate(java.lang.String)

使用以下脚本调用 UDF:

create temporary function genderMap as 'org.udf_drools_poc.UDFDrools';
select genderMap("Male");

有什么建议么?

谢谢。

标签: hadoophivedroolsuser-defined-functions

解决方案


推荐阅读