@SuppressWarnings("unchecked")
  // Used server-side too by Aggregation Coprocesor Endpoint. Undo this interdependence. TODO.
  ColumnInterpreter<T, S, P, Q, R> constructColumnInterpreterFromRequest(AggregateRequest request)
    throws IOException {
    String className = request.getInterpreterClassName();
    try {
      ColumnInterpreter<T, S, P, Q, R> ci;
      Class<?> cls = Class.forName(className);
      ci = (ColumnInterpreter<T, S, P, Q, R>) cls.getDeclaredConstructor().newInstance();

      if (request.hasInterpreterSpecificBytes()) {
        ByteString b = request.getInterpreterSpecificBytes();
        P initMsg = getParsedGenericInstance(ci.getClass(), 2, b);
        ci.initialize(initMsg);
      }
      return ci;
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
      | NoSuchMethodException | InvocationTargetException e) {
      throw new IOException(e);
    }
  }
Gives a List containing sum of values and sum of weights. It is computed for the combination of
column family and column qualifier(s) in the given row range as defined in the Scan object. In
its current implementation, it takes one column family and two column qualifiers. The first
qualifier is for values column and the second qualifier (optional) is for weight column.
hbase-endpoint/src/main/java/org/apache/hadoop/hbase/coprocessor/AggregateImplementation.java