WritableStringObjectInspector 无法转换为 BooleanObjectInspector

Tan*_*yan 2 java hadoop hive apache-pig hiveql

每次我运行一个包含来自 java 程序的 OR 条件的 hive 查询时,我都会收到以下错误,

引起原因:java.lang.ClassCastException:org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector无法转换为org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector。 hive.ql.udf.generic.GenericUDFOPOr.initialize(GenericUDFOPOr.java:53) 位于 org.apache.hadoop.hive.ql.udf.generic.GenericUDF.initializeAndFoldConstants(GenericUDF.java:117) 位于 org.apache.hadoop。 hive.ql.plan.ExprNodeGenericFuncDesc.newInstance(ExprNodeGenericFuncDesc.java:232) 位于 org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory$DefaultExprProcessor.getXpathOrFuncExprNodeDesc(TypeCheckProcFactory.java:958) 位于 org.apache.hadoop.hive。 ql.parse.TypeCheckProcFactory$DefaultExprProcessor.process(TypeCheckProcFactory.java:1175) 位于 org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher.dispatch(DefaultRuleDispatcher.java:90) 位于 org.apache.hadoop.hive.ql。 lib.DefaultGraphWalker.dispatchAndReturn(DefaultGraphWalker.java:94) 在 org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatch(DefaultGraphWalker.java:78) 在 org.apache.hadoop.hive.ql.lib.DefaultGraphWalker。步行(DefaultGraphWalker.java:132)在org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.startWalking(DefaultGraphWalker.java:109)在org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory。 java:192)在org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory.java:145)在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genAllExprNodeDesc(SemanticAnalyzer.java:10650)在 org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genExprNodeDesc(SemanticAnalyzer.java:10606) 在 org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genExprNodeDesc(SemanticAnalyzer.java:10577) 在 org.apache .hadoop.hive.ql.parse.SemanticAnalyzer.genFilterPlan(SemanticAnalyzer.java:2736) 在 org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genFilterPlan(SemanticAnalyzer.java:2717) 在 org.apache.hadoop.hive .ql.parse.SemanticAnalyzer.genBodyPlan(SemanticAnalyzer.java:8972) 在 org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9884) 在 org.apache.hadoop.hive.ql.parse .SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9777)在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genOPTree(SemanticAnalyzer.java:10250)在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal (SemanticAnalyzer.java:10261)在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10141)在org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java :222)在org.apache.hadoop.hive.ql.Driver.compile(Driver.java:430)在org.apache.hadoop.hive.ql.Driver.compile(Driver.java:305)在org.apache。 hadoop.hive.ql.Driver.compileInternal(Driver.java:1123) 在 org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1110) 在 org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:99) ... 26 更多

但是当我尝试运行以下java程序只是为了测试转换时,它转换成功了。

import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector;
public class MyClass {
    public static void main(String[] args) {
         ObjectInspector[] arguments = new ObjectInspector[2];
        BooleanObjectInspector boi0 = (BooleanObjectInspector) arguments[0];
        BooleanObjectInspector boi1 = (BooleanObjectInspector) arguments[1];
        System.out.println(boi1);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的类路径中只有一个 jar 文件,即 hive-exec-5.5.4。所以我没有看到任何 jar 冲突。还有其他解决方案吗?

Tan*_*yan 5

我的错,

查询中 OR 子句的右端在 key 之后没有条件。我已经解决了这个问题。