.../parquet/serde/ParquetHiveArrayInspector.java | 41 +++++++++------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java index 55614a3..c4a286d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java @@ -14,6 +14,7 @@ package org.apache.hadoop.hive.ql.io.parquet.serde; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; @@ -69,7 +70,7 @@ public Object getListElement(final Object data, final int index) { } if (data instanceof List) { - return ((List)data).get(index); + return ((List)data).get(index); } throw new UnsupportedOperationException("Cannot inspect " + data.getClass().getCanonicalName()); @@ -91,7 +92,7 @@ public int getListLength(final Object data) { } if (data instanceof List) { - return ((List)data).size(); + return ((List)data).size(); } throw new UnsupportedOperationException("Cannot inspect " + data.getClass().getCanonicalName()); @@ -108,13 +109,7 @@ public int getListLength(final Object data) { if (array == null) { return null; } - - final List list = new ArrayList(array.length); - for (final Writable obj : array) { - list.add(obj); - } - - return list; + return new ArrayList(Arrays.asList(array)); } if (data instanceof List) { @@ -126,29 +121,27 @@ public int getListLength(final Object data) { @Override public Object create(final int size) { - final ArrayList result = new ArrayList(size); - for (int i = 0; i < size; ++i) { - result.add(null); - } - return result; + return new ArrayList(Arrays.asList(new Object[size])); } @Override + @SuppressWarnings("unchecked") public Object set(final Object list, final int index, final Object element) { - final ArrayList l = (ArrayList) list; + final List l = (List) list; l.set(index, element); return list; } @Override + @SuppressWarnings("unchecked") public Object resize(final Object list, final int newSize) { - final ArrayList l = (ArrayList) list; - l.ensureCapacity(newSize); - while (l.size() < newSize) { - l.add(null); - } - while (l.size() > newSize) { - l.remove(l.size() - 1); + final List l = (List) list; + final int deltaSize = newSize - l.size(); + if (deltaSize > 0) { + l.addAll(Arrays.asList(new Object[deltaSize])); + } else { + int size = l.size(); + l.subList(size + deltaSize, size).clear(); } return list; } @@ -167,8 +160,6 @@ public boolean equals(final Object o) { @Override public int hashCode() { - int hash = 3; - hash = 29 * hash + (this.arrayElementInspector != null ? this.arrayElementInspector.hashCode() : 0); - return hash; + return (this.arrayElementInspector != null ? this.arrayElementInspector.hashCode() : 0); } }