den Quellcode prüfen geholfen Dinge zu klären. Hier sind die entsprechenden Code-Snippets aus GenericUDAFEvaluator.class Datei
evaluate(): Diese Methode stellt sicher, Aufruf von terminatePartial() zu implementieren, wenn der Ausführungsmodus PARTIAL1 oder PARTIAL2 ist, sonst würde terminate() aufgerufen werden um das Endergebnis auszugeben.
aggregate(): Diese Methode überprüft den Ausführungsmodus, um iterate() oder merge() als Alternative aufzurufen.
public void aggregate(AggregationBuffer agg, Object[] parameters) throws HiveException {
if ((this.mode == Mode.PARTIAL1) || (this.mode == Mode.COMPLETE)) {
iterate(agg, parameters);
} else {
assert (parameters.length == 1);
merge(agg, parameters[0]);
}
}
Die Differenz Modi der Ausführung sind, wie in dem Lebenszyklus eines UDAF • PARTIAL1 ○ von Originaldaten zu Teilaggregationsdaten folgt: iterieren() und terminatePartial() aufgerufen wird. Wird vom Mapper aufgerufen. • PARTIAL2 ○ Von partiellen Aggregationsdaten zu partiellen Aggregationsdaten: merge() und terminatePartial() werden aufgerufen. Wird vom Combiner aufgerufen. • KOMPLETT ○ Von den Originaldaten direkt zur vollständigen Aggregation: iterate() und terminate() werden aufgerufen. Wird in Fällen aufgerufen, in denen UDAF nicht über Map-Reduce-Stufen hinweg generiert wird. d. h. der Ruf ist nur auf die Reduzierstufe beschränkt. • FINAL von partieller Aggregation zu vollständiger Aggregation: merge() und terminate() werden aufgerufen. Wird aufgerufen, um die Stufe eines übergreifenden UDAF-Aufrufs für die Kartenreduktion zu reduzieren.