private void validateUDAF(Double expectedResult, GenericUDAFResolver2 udaf) throws Exception { ObjectInspector[] params = new ObjectInspector[] { javaDoubleObjectInspector, javaDoubleObjectInspector }; GenericUDAFParameterInfo gpi = new SimpleGenericUDAFParameterInfo(params, false, false, false); GenericUDAFExecutor executor = new GenericUDAFExecutor(udaf, gpi); List<Object> values = executor.run(rowSet); if (expectedResult == null) { for (Object v : values) { assertNull(v); } } else { for (Object v : values) { if (v instanceof DoubleWritable) { assertEquals(expectedResult, ((DoubleWritable) v).get(), 1e-10); } else { assertEquals(expectedResult, ((LongWritable) v).get(), 1e-10); } } } }
List<Object> run(List<Object[]> values) throws Exception { Object r1 = runComplete(values); Object r2 = runPartialFinal(values); Object r3 = runPartial2Final(values); return Lists.newArrayList(r1, r2, r3); }
private Object runPartialFinal(List<Object[]> values) throws Exception { GenericUDAFEvaluator eval = evaluatorFactory.getEvaluator(info); eval.init(GenericUDAFEvaluator.Mode.FINAL, partialOIs); AggregationBuffer buf = eval.getNewAggregationBuffer(); for (Object partialResult : runPartial1(values)) { eval.merge(buf, partialResult); } return eval.terminate(buf); }
private Object runPartial2Final(List<Object[]> values) throws Exception { GenericUDAFEvaluator eval = evaluatorFactory.getEvaluator(info); eval.init(GenericUDAFEvaluator.Mode.FINAL, partialOIs); AggregationBuffer buf = eval.getNewAggregationBuffer(); for (Object partialResult : runPartial2(runPartial1(values))) { eval.merge(buf, partialResult); } return eval.terminate(buf); }