in src/main/java/org/apache/datasketches/server/UpdateHandler.java [97:190]
private static void processBatchUpdate(final SketchStorage.SketchEntry entry,
final JsonArray data) {
switch (entry.family_) {
case UNION: // theta
assert(entry.type_ != null);
switch (entry.type_) {
case FLOAT: case DOUBLE:
for (final JsonElement e : data) { ((Union) entry.sketch_).update(e.getAsDouble()); }
break;
case INT: case LONG:
for (final JsonElement e : data) { ((Union) entry.sketch_).update(e.getAsLong()); }
break;
case STRING: default:
for (final JsonElement e : data) { ((Union) entry.sketch_).update(e.getAsString()); }
break;
}
break;
case CPC:
assert(entry.type_ != null);
switch (entry.type_) {
case FLOAT: case DOUBLE:
for (final JsonElement e : data) { ((CpcSketch) entry.sketch_).update(e.getAsDouble()); }
break;
case INT: case LONG:
for (final JsonElement e : data) { ((CpcSketch) entry.sketch_).update(e.getAsLong()); }
break;
case STRING: default:
for (final JsonElement e : data) { ((CpcSketch) entry.sketch_).update(e.getAsString()); }
break;
}
break;
case HLL:
assert(entry.type_ != null);
switch (entry.type_) {
case FLOAT: case DOUBLE:
for (final JsonElement e : data) { ((HllSketch) entry.sketch_).update(e.getAsDouble()); }
break;
case INT: case LONG:
for (final JsonElement e : data) { ((CpcSketch) entry.sketch_).update(e.getAsLong()); }
break;
case STRING: default:
for (final JsonElement e : data) { ((CpcSketch) entry.sketch_).update(e.getAsString()); }
break;
}
break;
case KLL:
for (final JsonElement e : data) { ((KllFloatsSketch) entry.sketch_).update(e.getAsFloat()); }
break;
case FREQUENCY:
for (final JsonElement e : data) {
if (e.isJsonObject()) {
final JsonObject inputPair = e.getAsJsonObject();
if (!inputPair.has(QUERY_PAIR_ITEM_FIELD) || !inputPair.has(QUERY_PAIR_WEIGHT_FIELD)) {
throw new IllegalArgumentException("Frequent Items input pairs must include both "
+ QUERY_PAIR_ITEM_FIELD + " and " + QUERY_PAIR_WEIGHT_FIELD + " values");
}
final String item = inputPair.get(QUERY_PAIR_ITEM_FIELD).getAsString();
final int weight = inputPair.get(QUERY_PAIR_WEIGHT_FIELD).getAsInt();
((ItemsSketch<String>) entry.sketch_).update(item, weight);
} else {
((ItemsSketch<String>) entry.sketch_).update(e.getAsString());
}
}
break;
case RESERVOIR:
for (final JsonElement e : data) { ((ReservoirItemsSketch<String>) entry.sketch_).update(e.getAsString()); }
break;
case VAROPT:
for (final JsonElement e : data) {
if (e.isJsonObject()) {
final JsonObject inputPair = e.getAsJsonObject();
if (!inputPair.has(QUERY_PAIR_ITEM_FIELD) || !inputPair.has(QUERY_PAIR_WEIGHT_FIELD)) {
throw new IllegalArgumentException("VarOpt input pairs must include both "
+ QUERY_PAIR_ITEM_FIELD + " and " + QUERY_PAIR_WEIGHT_FIELD + " values");
}
final String item = inputPair.get(QUERY_PAIR_ITEM_FIELD).getAsString();
final double weight = inputPair.get(QUERY_PAIR_WEIGHT_FIELD).getAsDouble();
((VarOptItemsSketch<String>) entry.sketch_).update(item, weight);
} else {
((VarOptItemsSketch<String>) entry.sketch_).update(e.getAsString(), 1.0);
}
}
break;
default:
throw new IllegalArgumentException("Unsupported sketch type: " + entry.family_);
}
}