@Override public InternalAggregation buildEmptyAggregation() { return new InternalTDigestPercentiles(name, keys, new TDigestState(compression), keyed, formatter, pipelineAggregators(), metaData()); } }
@Override public AbstractInternalTDigestPercentiles doReduce(List<InternalAggregation> aggregations, ReduceContext reduceContext) { TDigestState merged = null; for (InternalAggregation aggregation : aggregations) { final AbstractInternalTDigestPercentiles percentiles = (AbstractInternalTDigestPercentiles) aggregation; if (merged == null) { merged = new TDigestState(percentiles.state.compression()); } merged.add(percentiles.state); } return createReduced(getName(), keys, merged, keyed, pipelineAggregators(), getMetaData()); }
@Override public InternalAggregation buildAggregation(long owningBucketOrdinal) { TDigestState state = getState(owningBucketOrdinal); if (state == null) { return buildEmptyAggregation(); } else { return new InternalTDigestPercentiles(name, keys, state, keyed, formatter, pipelineAggregators(), metaData()); } }
@Override public InternalAggregation buildAggregation(long owningBucketOrdinal) { TDigestState state = getState(owningBucketOrdinal); if (state == null) { return buildEmptyAggregation(); } else { return new InternalTDigestPercentileRanks(name, keys, state, keyed, formatter, pipelineAggregators(), metaData()); } }
@Override public InternalAggregation buildEmptyAggregation() { return new InternalTDigestPercentileRanks(name, keys, new TDigestState(compression), keyed, formatter, pipelineAggregators(), metaData()); }
@Override public double metric(String name, long bucketOrd) { TDigestState state = getState(bucketOrd); if (state == null) { return Double.NaN; } else { return InternalTDigestPercentileRanks.percentileRank(state, Double.valueOf(name)); } } }
static double percentileRank(TDigestState state, double value) { double percentileRank = state.cdf(value); if (percentileRank < 0) { percentileRank = 0; } else if (percentileRank > 1) { percentileRank = 1; } return percentileRank * 100; }
@Override protected AbstractInternalTDigestPercentiles createReduced(String name, double[] keys, TDigestState merged, boolean keyed, List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) { return new InternalTDigestPercentileRanks(name, keys, merged, keyed, format, pipelineAggregators, metaData); }
@Override protected AbstractInternalTDigestPercentiles createReduced(String name, double[] keys, TDigestState merged, boolean keyed, List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) { return new InternalTDigestPercentiles(name, keys, merged, keyed, format, pipelineAggregators, metaData); }
@Override public Iterator<Percentile> iterator() { return new Iter(keys, state); }
@Override public Iterator<Percentile> iterator() { return new Iter(keys, state); }
@Override public double percentile(double percent) { return state.quantile(percent / 100); }
@Override public double value(double key) { return percentile(key); }
@Override public double percent(double value) { return percentileRank(state, value); }
@Override public double value(double key) { return percent(key); }
public long getEstimatedMemoryFootprint() { return state.byteSize(); }
@Override protected void doWriteTo(StreamOutput out) throws IOException { out.writeNamedWriteable(format); TDigestState.write(valuesSketch, out); out.writeDouble(medianAbsoluteDeviation); }
@Override public String percentileAsString(double percent) { return getPercentileAsString(percent); }
@Override public double percentile(double percent) { return getPercentile(percent); }