in src/main/java/org/apache/datasketches/hive/quantiles/GetQuantilesFromDoublesSketchUDF.java [94:120]
public List<Double> evaluate(final BytesWritable serializedSketch, final Boolean inclusive, final int number) {
if (serializedSketch == null) { return null; }
final DoublesSketch sketch = DoublesSketch.wrap(BytesWritableHelper.wrapAsMemory(serializedSketch));
if (sketch.isEmpty()) { return null; }
double[] quantiles = null;
if (number == 1) {
quantiles = new double[1];
quantiles[0] = sketch.getMinItem();
} else if (number == 2) {
quantiles = new double[2];
quantiles[0] = sketch.getMinItem();
quantiles[1] = sketch.getMaxItem();
} else if (number > 2) {
final double[] ranks = new double[number];
final double delta = 1.0 / (number - 1);
for (int i = 0; i < number; i++) {
ranks[i] = i * delta;
}
quantiles = sketch.getQuantiles(ranks,
(inclusive ? QuantileSearchCriteria.INCLUSIVE : QuantileSearchCriteria.EXCLUSIVE));
quantiles[number - 1] = sketch.getMaxItem(); // to ensure the max value is exact
}
if (quantiles == null) { return null; }
return Util.primitivesToList(quantiles);
}