Details
Description
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)
// 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))
This is causing arrayindexout of bounds exception and other typecast exceptions in object inspectors,
Please help,
Attachments
Attachments
Issue Links
- is duplicated by
-
HIVE-11051 Hive 1.2.0 MapJoin w/Tez - LazyBinaryArray cannot be cast to [Ljava.lang.Object;
- Closed