Hive GenericUDAFEvaluator类中evaluate()和aggregate()方法的重要性

Hive GenericUDAFEvaluator类中evaluate()和aggregate()方法的重要性,hive,Hive,GenericUDAFEvaluator类中evaluate()和aggregate()方法的用途/意义是什么?它与merge()所做的有什么区别 任何关于上述用法的示例都会有所帮助 merge()的用法: Javadocs:检查源代码有助于澄清问题。下面是GenericUDAFEvaluator.class文件中的相关代码片段 evaluate():此方法确保在执行模式为PARTIAL1或PARTIAL2时调用terminatePartial()实现,否则将调用terminate()以输出最终

GenericUDAFEvaluator类中evaluate()和aggregate()方法的用途/意义是什么?它与merge()所做的有什么区别

任何关于上述用法的示例都会有所帮助

merge()的用法:


Javadocs:

检查源代码有助于澄清问题。下面是GenericUDAFEvaluator.class文件中的相关代码片段

evaluate():此方法确保在执行模式为PARTIAL1或PARTIAL2时调用terminatePartial()实现,否则将调用terminate()以输出最终结果

public Object evaluate(AggregationBuffer agg) throws HiveException {
    if ((this.mode == Mode.PARTIAL1) || (this.mode == Mode.PARTIAL2)) {
        return terminatePartial(agg);
    }
    return terminate(agg);
}
aggregate():此方法正在检查执行模式以交替调用iterate()或merge()

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]);
    }
}
在UDAF的生命周期中,不同的执行模式如下所示 •第1部分 ○ 从原始数据到部分聚合数据:将调用iterate()和terminatePartial()。从映射器调用。 •第2部分 ○ 从部分聚合数据到部分聚合数据:将调用merge()和terminatePartial()。从组合器调用。 •完成 ○ 从原始数据直接到完全聚合:将调用iterate()和terminate()。在未跨map reduce阶段生成UDAF的情况下调用。i、 e呼叫仅限于减速器阶段。 •最终 从部分聚合到完全聚合:将调用merge()和terminate()。为映射reduce跨UDAF调用的reduce阶段调用