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