You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Ashutosh Chauhan (JIRA)" <ji...@apache.org> on 2015/08/24 09:30:45 UTC

[jira] [Updated] (HIVE-11176) Caused by: java.lang.ClassCastException: org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryStruct cannot be cast to [Ljava.lang.Object;

     [ https://issues.apache.org/jira/browse/HIVE-11176?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ashutosh Chauhan updated HIVE-11176:
------------------------------------
    Summary: Caused by: java.lang.ClassCastException: org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryStruct cannot be cast to [Ljava.lang.Object;  (was: aused by: java.lang.ClassCastException: org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryStruct cannot be cast to [Ljava.lang.Object;)

> Caused 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.0.0, 1.2.0
>         Environment: Hive 1.2 and TEz 0.7
>            Reporter: Soundararajan Velu
>            Priority: Critical
>         Attachments: HIVE-11176.1.patch.txt
>
>
> 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 or ORC file formats or custom jsonsede, Strangely this happens only while using Tez. 
> 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)