private void initFieldWriters() throws IOException { fieldConverters = Lists.newArrayList(); try { int fieldId = 0; for (VectorWrapper w : batch) { if (w.getField().getName().equalsIgnoreCase(WriterPrel.PARTITION_COMPARATOR_FIELD)) { continue; } FieldReader reader = w.getValueVector().getReader(); FieldConverter converter = getConverter(recordWriter, fieldId, w.getField().getName(), w.getValueVector().getMinorType(), reader); if (converter != null) { fieldId++; fieldConverters.add(converter); } } } catch(Exception e) { logger.error("Failed to create FieldWriter.", e); throw new IOException("Failed to initialize FieldWriters.", e); } }
private void setWriter(ValueVector v, ArrowType arrowType) { state = State.SINGLE; vector = v; type = v.getMinorType(); this.arrowType = arrowType; switch (type) { case STRUCT: writer = nullableStructWriterFactory.build((StructVector) vector); break; case LIST: writer = new UnionListWriter((ListVector) vector, nullableStructWriterFactory); break; case UNION: writer = new UnionWriter((UnionVector) vector, nullableStructWriterFactory); break; default: writer = type.getNewFieldWriter(vector); break; } }
validateType(vector.getMinorType());
private FieldWriter promoteToUnion() { String name = vector.getField().getName(); TransferPair tp = vector.getTransferPair(vector.getMinorType().name().toLowerCase(), vector.getAllocator()); tp.transfer(); if (parentContainer != null) { // TODO allow dictionaries in complex types unionVector = parentContainer.addOrGetUnion(name); unionVector.allocateNew(); } else if (listVector != null) { unionVector = listVector.promoteToUnion(); } unionVector.addVector((FieldVector) tp.getTo()); writer = new UnionWriter(unionVector, nullableStructWriterFactory); writer.setPosition(idx()); for (int i = 0; i <= idx(); i++) { unionVector.setType(i, vector.getMinorType()); } vector = null; state = State.UNION; return writer; }