public abstract class Aggregator extends Object implements ContextFunction
继承 Aggregator 实现 UDAF。
UDAF (User Defined Aggregation Function) :用户自定义聚合函数,其输入输出是多对一的关系,即将多条输入记录聚合成一条输出值。
可以与 SQL 中的 Group By 语句联用。
实现 Java UDAF 类需要继承 Aggregator 类。
Aggregator 流程主要分为四部分,分别对应四个主要接口:
newBuffer() 聚合中间值 buffer 的创建和初始化。
iterate(Writable, Writable[]) 实现此方法对输入数据进行计算,聚合到中间值 buffer。其中第一个参数是 newBuffer() 产生的结果,第二个参数是数据源。
merge(Writable, Writable) 实现此方法将两个中间值 merge 聚合到一起。其中第一个参数是 newBuffer() 产生的结果,第二个参数是 iterate 操作完成后产生的中间结果。
terminate(Writable) 实现此方法将 merge 操作完成后产生的中间结果转换为 ODPS SQL 基本类型。
setup(ExecutionContext)调用中完成,用户可重写此方法来实现一次性初始操作,例如共享资源的读取等。
Writable, 除内建类型外,用户可继承 Writable 类实现自定义类。示例代码(求平均值):
| Constructor and Description |
|---|
Aggregator() |
| Modifier and Type | Method and Description |
|---|---|
void |
close()
扫尾工作
|
abstract void |
iterate(Writable buffer,
Writable[] args)
对输入进行计算,生成中间结果
|
abstract void |
merge(Writable buffer,
Writable partial)
聚合中间结果,将 partial merge 到 buffer
|
abstract Writable |
newBuffer()
创建聚合Buffer
|
void |
setup(ExecutionContext ctx)
初始化工作。包括一些共享资源的载入等。
只在初始时被调用,建议一次性的操作都写入本方法。
资源载入通过
ExecutionContext 完成 |
abstract Writable |
terminate(Writable buffer)
生成最终结果
|
public void setup(ExecutionContext ctx) throws UDFException
ExecutionContext 完成setup in interface ContextFunctionctx - UDFExceptionpublic void close()
throws UDFException
close in interface ContextFunctionUDFExceptionpublic abstract Writable newBuffer()
public abstract void iterate(Writable buffer, Writable[] args) throws UDFException
buffer - 聚合bufferargs - SQL中调用UDAF时指定的参数UDFExceptionpublic abstract Writable terminate(Writable buffer) throws UDFException
buffer - UDFExceptionpublic abstract void merge(Writable buffer, Writable partial) throws UDFException
buffer - partial - UDFExceptionCopyright © 2023 Alibaba Cloud Computing. All rights reserved.