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)