You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Soundararajan Velu (JIRA)" <ji...@apache.org> on 2015/07/02 23:11:04 UTC
[jira] [Created] (HIVE-11176) aused by:
java.lang.ClassCastException:
org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryStruct cannot be cast to
[Ljava.lang.Object;
Soundararajan Velu created HIVE-11176:
-----------------------------------------
Summary: aused by: java.lang.ClassCastException: org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryStruct cannot be cast to [Ljava.lang.Object;
Key: HIVE-11176
URL: https://issues.apache.org/jira/browse/HIVE-11176
Project: Hive
Issue Type: Bug
Components: Hive, Tez
Affects Versions: 1.2.0, 1.0.0
Environment: Hive 1.2 and TEz 0.7
Reporter: Soundararajan Velu
Priority: Critical
Unreachable code:
hive/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardStructObjectInspector.java
// With Data
@Override
@SuppressWarnings("unchecked")
public Object getStructFieldData(Object data, StructField fieldRef) {
if (data == null) {
return null;
}
// We support both List<Object> and Object[]
// so we have to do differently.
boolean isArray = ! (data instanceof List);
if (!isArray && !(data instanceof List)) {
return data;
}
*************************
The if condition above translates to
if(!true && true) the code section cannot be reached,
this causes a lot of class cast exceptions while using Tez and ORC file formats,
Changed the code to
boolean isArray = data.getClass().isArray();
if (!isArray && !(data instanceof List)) {
return data;
}
Even then, lazystructs get passed as fields causing downstream cast exceptions like lazystruct cannot be cast to Text etc...
So I changed the method to something like this,
// With Data
@Override
@SuppressWarnings("unchecked")
public Object getStructFieldData(Object data, StructField fieldRef) {
if (data == null) {
return null;
}
if (data instanceof LazyBinaryStruct) {
data = ((LazyBinaryStruct) data).getFieldsAsList();
}
// We support both List<Object> and Object[]
// so we have to do differently.
boolean isArray = data.getClass().isArray();
if (!isArray && !(data instanceof List)) {
return data;
}
This is causing arrayindexout of bounds exception and other typecast exceptions in object inspectors,
Please help,
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)