@Override public BigDecimal read(Decoder decoder, Object ignored) throws IOException { // there isn't a way to get the backing buffer out of a BigInteger, so this can't reuse. byte[] bytes = bytesReader.read(decoder, null); return new BigDecimal(new BigInteger(bytes), scale); } }
@Override public Object read(Decoder decoder, Object reuse) throws IOException { int index = decoder.readIndex(); return readers[index].read(decoder, reuse); } }
@Override public Decimal read(Decoder decoder, Object reuse) throws IOException { byte[] bytes = bytesReader.read(decoder, null); return Decimal.apply(new BigDecimal(new BigInteger(bytes), scale)); } }
@Override public T read(T reuse, Decoder decoder) throws IOException { ResolvingDecoder resolver = resolve(decoder); T value = reader.read(resolver, reuse); resolver.drain(); return value; }
@Override public T read(T reuse, Decoder decoder) throws IOException { ResolvingDecoder resolver = resolve(decoder); T value = reader.read(resolver, reuse); resolver.drain(); return value; }
@Override public InternalRow read(InternalRow reuse, Decoder decoder) throws IOException { ResolvingDecoder resolver = resolve(decoder); InternalRow row = reader.read(resolver, reuse); resolver.drain(); return row; }
@Override public GenericArrayData read(Decoder decoder, Object reuse) throws IOException { reusedList.clear(); long chunkLength = decoder.readArrayStart(); while (chunkLength > 0) { for (int i = 0; i < chunkLength; i += 1) { reusedList.add(elementReader.read(decoder, null)); } chunkLength = decoder.arrayNext(); } // this will convert the list to an array so it is okay to reuse the list return new GenericArrayData(reusedList.toArray()); } }
@Override @SuppressWarnings("unchecked") public Collection<T> read(Decoder decoder, Object reused) throws IOException { LinkedList<T> resultList; if (lastList != null) { lastList.clear(); resultList = (LinkedList<T>) lastList; } else { resultList = Lists.newLinkedList(); } if (reused instanceof LinkedList) { this.lastList = (LinkedList<?>) reused; } else { this.lastList = null; } long chunkLength = decoder.readArrayStart(); Iterator<?> elIter = lastList != null ? lastList.iterator() : emptyIterator(); while (chunkLength > 0) { for (long i = 0; i < chunkLength; i += 1) { Object lastValue = elIter.hasNext() ? elIter.next() : null; resultList.addLast(elementReader.read(decoder, lastValue)); } chunkLength = decoder.arrayNext(); } return resultList; } }
@Override public ArrayBasedMapData read(Decoder decoder, Object reuse) throws IOException { reusedKeyList.clear(); reusedValueList.clear(); long chunkLength = decoder.readArrayStart(); while (chunkLength > 0) { for (int i = 0; i < chunkLength; i += 1) { reusedKeyList.add(keyReader.read(decoder, null)); reusedValueList.add(valueReader.read(decoder, null)); } chunkLength = decoder.arrayNext(); } return new ArrayBasedMapData( new GenericArrayData(reusedKeyList.toArray()), new GenericArrayData(reusedValueList.toArray())); } }
@Override public ArrayBasedMapData read(Decoder decoder, Object reuse) throws IOException { reusedKeyList.clear(); reusedValueList.clear(); long chunkLength = decoder.readMapStart(); while (chunkLength > 0) { for (int i = 0; i < chunkLength; i += 1) { reusedKeyList.add(keyReader.read(decoder, null)); reusedValueList.add(valueReader.read(decoder, null)); } chunkLength = decoder.mapNext(); } return new ArrayBasedMapData( new GenericArrayData(reusedKeyList.toArray()), new GenericArrayData(reusedValueList.toArray())); } }
@Override public S read(Decoder decoder, Object reuse) throws IOException { S struct = reuseOrCreate(reuse); if (decoder instanceof ResolvingDecoder) { // this may not set all of the fields. nulls are set by default. for (org.apache.avro.Schema.Field field : ((ResolvingDecoder) decoder).readFieldOrder()) { Object reusedValue = get(struct, field.pos()); set(struct, field.pos(), readers[field.pos()].read(decoder, reusedValue)); } } else { for (int i = 0; i < readers.length; i += 1) { Object reusedValue = get(struct, i); set(struct, i, readers[i].read(decoder, reusedValue)); } } return struct; } }
@Override public InternalRow read(Decoder decoder, Object reuse) throws IOException { GenericInternalRow row = new GenericInternalRow(readers.length); if (decoder instanceof ResolvingDecoder) { // this may not set all of the fields. nulls are set by default. for (Schema.Field field : ((ResolvingDecoder) decoder).readFieldOrder()) { Object value = readers[field.pos()].read(decoder, null); if (value != null) { row.update(field.pos(), value); } else { row.setNullAt(field.pos()); } } } else { for (int i = 0; i < readers.length; i += 1) { Object value = readers[i].read(decoder, null); if (value != null) { row.update(i, value); } else { row.setNullAt(i); } } } return row; } }
return (ValueReader<Long>) (decoder, ignored) -> longs.read(decoder, null) * 1000L;
return (ValueReader<Long>) (decoder, ignored) -> longs.read(decoder, null) * 1000L;