in src/main/java/org/apache/datasketches/server/SketchStorage.java [152:202]
private void createSketches(final List<SketchServerConfig.SketchInfo> list) throws IllegalArgumentException {
sketchMap = new HashMap<>(list.size());
for (final SketchServerConfig.SketchInfo info : list) {
if (sketchMap.containsKey(info.name)) {
throw new IllegalArgumentException("Duplicate sketch key: " + info.name);
}
SketchEntry sketchEntry = null;
final Family family = BaseSketchesQueryHandler.familyFromString(info.family);
final int k = info.k; // to reduce derferences in code later
switch (family) {
case QUICKSELECT:
// make a Union so we can handle merges later
sketchEntry = new SketchEntry(Family.UNION, ValueType.stringToType(info.type),
new SetOperationBuilder().setNominalEntries(1 << k).buildUnion(), info.name, k);
break;
case HLL:
sketchEntry = new SketchEntry(Family.HLL, ValueType.stringToType(info.type),
new HllSketch(k), info.name, k);
break;
case CPC:
sketchEntry = new SketchEntry(Family.CPC, ValueType.stringToType(info.type),
new CpcSketch(k), info.name, k);
break;
case KLL:
sketchEntry = new SketchEntry(Family.KLL, new KllFloatsSketch(k), info.name, k);
break;
case FREQUENCY:
sketchEntry = new SketchEntry(Family.FREQUENCY, new ItemsSketch<String>(k), info.name, k);
break;
case RESERVOIR:
sketchEntry = new SketchEntry(Family.RESERVOIR, ReservoirItemsSketch.<String>newInstance(k), info.name, k);
break;
case VAROPT:
sketchEntry = new SketchEntry(Family.VAROPT, VarOptItemsSketch.<String>newInstance(k), info.name, k);
break;
}
if (sketchEntry != null) {
sketchMap.put(info.name, sketchEntry);
}
}
}