def quantiles()

in src/main/scala/com/amazon/deequ/analyzers/QuantileNonSample.scala [246:278]


  def quantiles(q: Int) : Array[T] = {

    if (output.isEmpty) {
      return Array.empty
    }

    val sortedItems = output.sortBy({
      case (item, _) => item
    })
    val totalWeight = sortedItems.map({
      case (_, weight) => weight
    }).sum
    var nextThresh = totalWeight/q
    var curq = 1
    var i = 0
    var sumSoFar: Long = 0
    val (initializedValue, _) = sortedItems(0)
    val quantiles = Array.fill[T](q - 1)(initializedValue)


    while (i < sortedItems.length && curq < q) {
      while (sumSoFar < nextThresh) {
        val (_, weight) = sortedItems(i)
        sumSoFar += weight
        i += 1
      }
      val (item, _) = sortedItems(math.min(i, sortedItems.length - 1))
      quantiles(curq - 1) = item
      curq += 1
      nextThresh = curq * totalWeight / q
    }
    quantiles
  }