You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Sergey Shelukhin (JIRA)" <ji...@apache.org> on 2015/11/12 03:12:11 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 ]
Sergey Shelukhin updated HIVE-11176:
------------------------------------
Should this issue be backported to branch-1? It looks like a bug.
> 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
> Assignee: Navis
> Priority: Critical
> Fix For: 2.0.0
>
> 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)