@Override public byte[] serialize(TDigest tDigest) { byte[] bytes = new byte[tDigest.byteSize()]; tDigest.asBytes(ByteBuffer.wrap(bytes)); return bytes; }
@Override public TDigest applyAggregatedValue(TDigest value, TDigest aggregatedValue) { value.add(aggregatedValue); _maxByteSize = Math.max(_maxByteSize, value.byteSize()); return value; }
@Override public TDigest applyRawValue(TDigest value, Object rawValue) { if (rawValue instanceof byte[]) { value.add(deserializeAggregatedValue((byte[]) rawValue)); } else { value.add(((Number) rawValue).doubleValue()); } _maxByteSize = Math.max(_maxByteSize, value.byteSize()); return value; }
@Override public TDigest getInitialAggregatedValue(Object rawValue) { TDigest initialValue; if (rawValue instanceof byte[]) { byte[] bytes = (byte[]) rawValue; initialValue = deserializeAggregatedValue(bytes); _maxByteSize = Math.max(_maxByteSize, bytes.length); } else { initialValue = TDigest.createMergingDigest(PercentileTDigestAggregationFunction.DEFAULT_TDIGEST_COMPRESSION); initialValue.add(((Number) rawValue).doubleValue()); _maxByteSize = Math.max(_maxByteSize, initialValue.byteSize()); } return initialValue; }
@Override public void write(Kryo kryo, Output output, PercentileCounter counter) { int length = counter.getRegisters().byteSize(); ByteBuffer buffer = ByteBuffer.allocate(length); counter.getRegisters().asSmallBytes(buffer); output.writeDouble(counter.getCompression()); output.writeDouble(counter.getQuantileRatio()); output.writeInt(buffer.position()); output.write(buffer.array(), 0, buffer.position()); }
ByteBuffer byteBuffer = ByteBuffer.allocate(tDigest.byteSize()); tDigest.asBytes(byteBuffer); valueMap.put(TDIGEST_COLUMN, byteBuffer.array());
ByteBuffer byteBuffer = ByteBuffer.allocate(tDigest.byteSize()); tDigest.asBytes(byteBuffer); valueMap.put(TDIGEST_COLUMN, byteBuffer.array());
@Override public void write(Kryo kryo, Output output) { //storing tdigest ByteBuffer outBuffer = ByteBuffer.allocate(digest.byteSize()); digest.asBytes(outBuffer); byte[] tdigestSerialized = outBuffer.array(); output.writeInt(tdigestSerialized.length); output.writeBytes(tdigestSerialized); output.writeLong(n); output.writeDouble(sum); output.writeDouble(sumOfSquares); output.writeDouble(sumOfLogs); output.writeDouble(getMin()); output.writeDouble(getMax()); output.writeDouble(M1); output.writeDouble(M2); output.writeDouble(M3); output.writeDouble(M4); }
byte[] className = tdigest.getClass().getName().getBytes(Charsets.UTF_8); int vlen = exactValues == null ? 0 : numExactValues; ByteBuffer buf = ByteBuffer.allocate(4 + 8*5 + 4 + 4 + 8*vlen + 4 + className.length + tdigest.byteSize() + 4);
@Override public void write(Kryo kryo, Output output, PercentileCounter counter) { int length = counter.getRegisters().byteSize(); ByteBuffer buffer = ByteBuffer.allocate(length); counter.getRegisters().asSmallBytes(buffer); output.writeDouble(counter.getCompression()); output.writeDouble(counter.getQuantileRatio()); output.writeInt(buffer.position()); output.write(buffer.array(), 0, buffer.position()); }