public List evaluate()

in src/main/java/org/apache/datasketches/hive/quantiles/GetQuantilesFromStringsSketchUDF.java [101:132]


  public List<String> evaluate(final BytesWritable serializedSketch, final Boolean inclusive, final int number) {
    if (serializedSketch == null) { return null; }
    final ItemsSketch<String> sketch = ItemsSketch.getInstance(
      String.class,
      BytesWritableHelper.wrapAsMemory(serializedSketch),
      Comparator.naturalOrder(),
      new ArrayOfStringsSerDe()
    );
    if (sketch.isEmpty()) { return null; }

    String[] quantiles = null;
    if (number == 1) {
      quantiles = new String[1];
      quantiles[0] = sketch.getMinItem();
    } else if (number == 2) {
      quantiles = new String[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 Arrays.asList(quantiles);
  }