2017-03-23 2 views
0

Welche Bedeutung/Bedeutung haben die Methoden evaluate() und aggregate() in der GenericUDAFEvaluator-Klasse? Wie unterscheidet es sich von dem, was merge() macht?Bedeutung der Methoden evaluate() und aggregate() in der GenericUDAFEvaluator-Klasse

Jedes Beispiel zur Verwendung der oben genannten wäre hilfreich.

Verwendung von merge(): http://beekeeperdata.com/posts/hadoop/2015/08/17/hive-udaf-tutorial.html

Javadocs: https://hive.apache.org/javadocs/r0.10.0/api/org/apache/hadoop/hive/ql/udf/generic/GenericUDAFEvaluator.html

Antwort

0

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.