package cookbook.groupedaverage;
import dontweave.gson.JsonObject;
import water.Key;
import water.Request2;
import water.UKV;
import water.api.DocGen;
import water.fvec.Frame;
import water.fvec.Vec;
public class GroupedAverage extends Request2 {
static final int API_WEAVER = 1; // This file has auto-gen'd doc & json fields
static public DocGen.FieldDoc[] DOC_FIELDS; // Initialized from Auto-Gen code.
@API(help = "Destination key", filter = Default.class, json = true, validator = DestKeyValidator.class)
public Key destination_key; // Key holding final value after job is removed
static class DestKeyValidator extends Validator.NOPValidator<Key> {
@Override public void validateRaw(String value) {
String pattern = "[a-zA-Z0-9._]+";
if (! value.matches(pattern)) {
throw new IllegalArgumentException("Invalid key (valid pattern regex is: '" + pattern + "')");
}
}
}
@API(help = "Source frame", required = true, filter = Default.class)
public Frame source;
@API(help="Column to use as group id", required=true, filter=groupFilter.class)
public Vec group;
class groupFilter extends VecClassSelect { groupFilter() { super("source"); } }
@API(help="Column to generate an average for", required=true, filter=valueFilter.class)
public Vec value;
class valueFilter extends VecClassSelect { valueFilter() { super("source"); } }
@Override public Response serve() {
JsonObject json = new JsonObject();
Frame fr = source.deepSlice(null, null);
UKV.put(destination_key, fr);
return Response.done(json);
}
}