java - WritableStringObjectInspector 无法转换为 BooleanObjectInspector

标签 java hadoop hive apache-pig hiveql

每次我从 java 程序运行具有 OR 条件的 hive 查询时,都会收到以下错误,

Caused by: java.lang.ClassCastException: org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector cannot be cast to org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector at org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPOr.initialize(GenericUDFOPOr.java:53) at org.apache.hadoop.hive.ql.udf.generic.GenericUDF.initializeAndFoldConstants(GenericUDF.java:117) at org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc.newInstance(ExprNodeGenericFuncDesc.java:232) at org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory$DefaultExprProcessor.getXpathOrFuncExprNodeDesc(TypeCheckProcFactory.java:958) at org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory$DefaultExprProcessor.process(TypeCheckProcFactory.java:1175) at org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher.dispatch(DefaultRuleDispatcher.java:90) at org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatchAndReturn(DefaultGraphWalker.java:94) at org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatch(DefaultGraphWalker.java:78) at org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.walk(DefaultGraphWalker.java:132) at org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.startWalking(DefaultGraphWalker.java:109) at org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory.java:192) at org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory.java:145) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genAllExprNodeDesc(SemanticAnalyzer.java:10650) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genExprNodeDesc(SemanticAnalyzer.java:10606) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genExprNodeDesc(SemanticAnalyzer.java:10577) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genFilterPlan(SemanticAnalyzer.java:2736) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genFilterPlan(SemanticAnalyzer.java:2717) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genBodyPlan(SemanticAnalyzer.java:8972) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9884) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9777) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genOPTree(SemanticAnalyzer.java:10250) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10261) at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10141) at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:222) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:430) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:305) at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1123) at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1110) at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:99) ... 26 more

但是当我尝试运行以下 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);
    }
}

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

最佳答案

我的错,

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

关于java - WritableStringObjectInspector 无法转换为 BooleanObjectInspector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38973632/

相关文章:

python - 在 ubuntu hadoop 独立安装 HUE 时找不到模块 saml2

sql - 为什么我不能在Hive中使用带有多个insert子句的高级聚合功能?

java - JDK 8 中的 PermGen 消除

java - 使用hadoop作业的输出作为另一个的输入

java - 如何在JComboBox中显示SDK列表?

spring - 在Spring数据hadoop上运行作业的问题

hadoop - Hive 中 Cluster By 和 CLUSTERED BY 的区别?

java - 使用 java 使用语句类的单个 execute() 方法执行多个配置单元查询

java - 为什么我不能使用这个循环无限读取 double ?

java - 通过选项列表显示结果的最佳方式