【发布时间】:2014-10-20 09:54:44
【问题描述】:
我已经创建了一个表:
添加jar /../xlibs/hive-json-serde-0.2.jar;
创建外部表 SerdeTest (唯一_ID STRING ,会员ID字符串 ,数据数组> )
分区者(Pyear INT,Pmonth INT)
行格式 SERDE "org.apache.hadoop.hive.contrib.serde2.JsonSerde";
ALTER TABLE SerdeTest 添加 PARTITION (Pyear = 2014, Pmonth =03) LOCATION '../Test2';
文件中的数据:
{"Unique_ID":"ABC6800650654751","MemberID":"KHH966375835","Data":[{"SerialNo":1,"VariableName":"Var1","VariableValue":"A_49"},{ "SerialNo":2,"VariableName":"Var2","VariableValue":"B_89"},{""SerialNo":3,"VariableName":"Var3","VariableValue":"A_99"}]}
选择我正在使用的查询:
从 SerdeTest 中选择 Data[0].SerialNo,其中 Unique_ID = 'ABC6800650654751';
但是,当我运行此查询时,我收到以下错误:
java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row [Error getting row data with exception java.lang.ClassCastException: org.json.JSONArray cannot be cast到 [Ljava.lang.Object; 在 org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector.getList(StandardListObjectInspector.java:98) 在 org.apache.hadoop.hive.serde2.SerDeUtils.buildJSONString(SerDeUtils.java:330) 在 org.apache.hadoop.hive.serde2.SerDeUtils.buildJSONString(SerDeUtils.java:386) 在 org.apache.hadoop.hive.serde2.SerDeUtils.getJSONString(SerDeUtils.java:237) 在 org.apache.hadoop.hive.serde2.SerDeUtils.getJSONString(SerDeUtils.java:223) 在 org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:539) 在 org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:157) 在 org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50) 在 org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:418) 在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:349) 在 org.apache.hadoop.mapred.Child$4.run(Child.java:270) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127) 在 org.apache.hadoop.mapred.Child.main(Child.java:264) ]
谁能告诉我我做错了什么
【问题讨论】: