@Override public void write(K key, V value) throws IOException { ArrowWrapperWritable arrowWrapperWritable = (ArrowWrapperWritable) value; if (arrowStreamWriter == null) { VectorSchemaRoot vectorSchemaRoot = arrowWrapperWritable.getVectorSchemaRoot(); arrowStreamWriter = new ArrowStreamWriter(vectorSchemaRoot, null, out); allocator = arrowWrapperWritable.getAllocator(); this.out.setAllocator(allocator); rootVector = arrowWrapperWritable.getRootVector(); } arrowStreamWriter.writeBatch(); } }
@Override public void close(Reporter reporter) throws IOException { try { arrowStreamWriter.close(); } finally { rootVector.close(); //bytesLeaked should always be 0 long bytesLeaked = allocator.getAllocatedMemory(); if(bytesLeaked != 0) { LOG.error("Arrow memory leaked bytes: {}", bytesLeaked); throw new IllegalStateException("Arrow memory leaked bytes:" + bytesLeaked); } allocator.close(); } }
@Override protected void endInternal(WriteChannel out) throws IOException { writeEndOfStream(out); } }