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)