private List<StripeInformation> createStripes(long... rowCounts) { long offset = 0; List<StripeInformation> result = new ArrayList<StripeInformation>(rowCounts.length); for(long count: rowCounts) { OrcProto.StripeInformation.Builder stripe = OrcProto.StripeInformation.newBuilder(); stripe.setDataLength(800).setIndexLength(100).setFooterLength(100) .setNumberOfRows(count).setOffset(offset); offset += 1000; result.add(new ReaderImpl.StripeInformationImpl(stripe.build())); } return result; }
for(long stripeLength: stripeLengths) { footer.addStripes(OrcProto.StripeInformation.newBuilder() .setOffset(offset) .setIndexLength(0) .setDataLength(stripeLength-10)
@Override public void appendRawStripe(ByteBuffer buffer, OrcProto.StripeInformation.Builder dirEntry) throws IOException { long start = rawWriter.getPos(); int length = buffer.remaining(); long availBlockSpace = blockSize - (start % blockSize); // see if stripe can fit in the current hdfs block, else pad the remaining // space in the block if (length < blockSize && length > availBlockSpace && addBlockPadding) { byte[] pad = new byte[(int) Math.min(HDFS_BUFFER_SIZE, availBlockSpace)]; LOG.info(String.format("Padding ORC by %d bytes while merging..", availBlockSpace)); start += availBlockSpace; while (availBlockSpace > 0) { int writeLen = (int) Math.min(availBlockSpace, pad.length); rawWriter.write(pad, 0, writeLen); availBlockSpace -= writeLen; } } rawWriter.write(buffer.array(), buffer.arrayOffset() + buffer.position(), length); dirEntry.setOffset(start); }
OrcProto.StripeInformation dirEntry = OrcProto.StripeInformation.newBuilder() .setOffset(start) .setNumberOfRows(rowsInStripe) .setIndexLength(indexSize)
OrcProto.StripeInformation dirEntry = OrcProto.StripeInformation.newBuilder() .setOffset(start) .setNumberOfRows(rowsInStripe) .setIndexLength(indexSize)
.setOffset(start) .setNumberOfRows(rowsInStripe) .setIndexLength(stripeInfo.getIndexLength())
.setOffset(start) .setNumberOfRows(rowsInStripe) .setIndexLength(stripeInfo.getIndexLength())
public Builder mergeFrom(org.apache.orc.OrcProto.StripeInformation other) { if (other == org.apache.orc.OrcProto.StripeInformation.getDefaultInstance()) return this; if (other.hasOffset()) { setOffset(other.getOffset()); } if (other.hasIndexLength()) { setIndexLength(other.getIndexLength()); } if (other.hasDataLength()) { setDataLength(other.getDataLength()); } if (other.hasFooterLength()) { setFooterLength(other.getFooterLength()); } if (other.hasNumberOfRows()) { setNumberOfRows(other.getNumberOfRows()); } this.mergeUnknownFields(other.getUnknownFields()); return this; }
private void writeStripeFooter(OrcProto.StripeFooter footer, long dataSize, long indexSize, OrcProto.StripeInformation.Builder dirEntry) throws IOException { footer.writeTo(protobufWriter); protobufWriter.flush(); writer.flush(); dirEntry.setOffset(stripeStart); dirEntry.setFooterLength(rawWriter.getPos() - stripeStart - dataSize - indexSize); }