in src/main/java/org/apache/datasketches/pig/tuple/DataToArrayOfDoublesSketchBase.java [119:172]
static void updateSketch(
final DataBag bag, final ArrayOfDoublesUpdatableSketch sketch, final int numValues)
throws ExecException {
if (bag == null) {
throw new IllegalArgumentException("InputTuple.Field0: Bag may not be null");
}
final double[] values = new double[numValues];
for (final Tuple tuple: bag) {
if (tuple.size() != numValues + 1) {
throw new IllegalArgumentException("Inner tuple of input bag must have " + (numValues + 1)
+ " fields.");
}
final Object key = tuple.get(0);
if (key == null) { continue; }
for (int i = 0; i < numValues; i++) {
values[i] = (Double) tuple.get(i + 1);
}
switch (tuple.getType(0)) {
case DataType.BYTE:
sketch.update(((Byte) key).longValue(), values);
break;
case DataType.INTEGER:
sketch.update(((Integer) key).longValue(), values);
break;
case DataType.LONG:
sketch.update((Long) key, values);
break;
case DataType.FLOAT:
sketch.update((Float) key, values);
break;
case DataType.DOUBLE:
sketch.update((Double) key, values);
break;
case DataType.BYTEARRAY:
final DataByteArray dba = (DataByteArray) key;
if (dba.size() != 0) {
sketch.update(dba.get(), values);
}
break;
case DataType.CHARARRAY:
final String s = key.toString();
if (!s.isEmpty()) {
sketch.update(s, values);
}
break;
default:
throw new IllegalArgumentException("Field 0 must be one of "
+ "NULL, BYTE, INTEGER, LONG, FLOAT, DOUBLE, BYTEARRAY or CHARARRAY. " + "Type = "
+ DataType.findTypeName(tuple.getType(0)) + ", Object = " + key.toString());
}
}
}