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)

Reply via email to