diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java index 582a5df..03dc624 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java @@ -16,7 +16,6 @@ import org.apache.hadoop.io.ArrayWritable; import org.apache.hadoop.io.Writable; -import parquet.io.ParquetDecodingException; import parquet.io.api.Converter; import parquet.schema.GroupType; @@ -25,21 +24,19 @@ private final Converter[] converters; private final HiveGroupConverter parent; private final int index; - private final boolean isMap; - private Writable currentValue; - private Writable[] mapPairContainer; + private Writable[] values; + private final int length; public ArrayWritableGroupConverter(final GroupType groupType, final HiveGroupConverter parent, final int index) { this.parent = parent; this.index = index; - int count = groupType.getFieldCount(); - if (count < 1 || count > 2) { - throw new IllegalStateException("Field count must be either 1 or 2: " + count); + length = groupType.getFieldCount(); + if (length == 0) { + throw new IllegalStateException("Field count must be non zero"); } - isMap = count == 2; - converters = new Converter[count]; - for (int i = 0; i < count; i++) { + converters = new Converter[length]; + for (int i = 0; i < length; i++) { converters[i] = getConverterFromDescription(groupType.getType(i), i, this); } } @@ -51,31 +48,18 @@ public Converter getConverter(final int fieldIndex) { @Override public void start() { - if (isMap) { - mapPairContainer = new Writable[2]; - } + values = new Writable[length]; } @Override public void end() { - if (isMap) { - currentValue = new ArrayWritable(Writable.class, mapPairContainer); - } + Writable currentValue = length == 1 ? values[0] : new ArrayWritable(Writable.class, values); parent.add(index, currentValue); } @Override protected void set(final int index, final Writable value) { - if (index != 0 && mapPairContainer == null || index > 1) { - throw new ParquetDecodingException("Repeated group can only have one or two fields for maps." + - " Not allowed to set for the index : " + index); - } - - if (isMap) { - mapPairContainer[index] = value; - } else { - currentValue = value; - } + values[index] = value; } @Override