in src/main/java/org/apache/datasketches/characterization/quantiles/DruidAppHistStreamAProfile.java [103:167]
private void processInputStream() {
checkIfZipped(srcFileName);
//Read
job.println("Input Lines Processed: ");
final LineReader lineReader = new LineReader(srcFileName);
final long startReadTime_nS = System.nanoTime();
lineReader.read(0, proc);
final long readTime_nS = System.nanoTime() - startReadTime_nS;
//print hist stats
job.println(ahist.toString().replace(", ", "\n").replace("*", ""));
job.println("Max Storage Size: " + ahist.getMaxStorageSize());
//CDF
final float[] fracRanks = buildRanksArr(numRanks);
final long startCdfTime_nS = System.nanoTime();
final float[] quantiles = ahist.getQuantiles(fracRanks);
final long cdfTime_nS = System.nanoTime() - startCdfTime_nS;
job.println("");
job.println("CDF");
job.println(String.format(cdfHdr, "Index", "Rank", "Quantile"));
for (int i = 0; i < numRanks; i++) {
final String s = String.format(cdfFmt, i, fracRanks[i], (int)quantiles[i]);
job.println(s);
}
job.println("");
//print PMF histogram, using Points Per Log Base.
minV = ahist.getMin();
maxV = ahist.getMax();
numItems = ahist.count();
final double[] splitpoints = buildSplitPointsArr(minV, maxV, pplb, logBase, eps);
numSP = splitpoints.length;
spArr = new float[numSP];
for (int i = 0; i < numSP; i++) { spArr[i] = (float) splitpoints[i]; }
//PMF
final long startPmfTime_nS = System.nanoTime();
final Histogram hist = ahist.toHistogram(spArr);
final double[] breaksArr = hist.getBreaks();
final double[] countsArr = hist.getCounts();
final long pmfTime_nS = System.nanoTime() - startPmfTime_nS;
final int lenBreaks = breaksArr.length;
job.println("PMF");
job.println(String.format(pmfHdr, "Index", "Quantile", "Mass"));
int i;
for (i = 0; i < lenBreaks - 1; i++) {
job. println(String.format(pmfFmt, i, breaksArr[i], countsArr[i]));
}
job.println(String.format(pmfFmt, i, breaksArr[i], 0.0)); // the last point
final double readTime_S = readTime_nS / 1E9;
job.println("");
job.println(String.format("ReadTime_Sec :\t%10.3f", readTime_S));
job.println(String.format("ReadRate/Sec :\t%,10.0f", numItems / readTime_S));
job.println(String.format("CdfTime_mSec :\t%10.3f", cdfTime_nS / 1E6));
job.println(String.format("Cdf/Point_nSec:\t%10.3f", (double)cdfTime_nS / numRanks));
job.println(String.format("PmfTime_mSec :\t%10.3f", pmfTime_nS / 1E6));
job.println(String.format("Pmf/Point_nSec:\t%10.3f", (double)pmfTime_nS / lenBreaks));
}