public abstract class UDTF extends Object implements ContextFunction
UDTF 是 User Defined Table-generating Function 缩写,用来解决一次函数调用输出多行数据的场景,也是唯一能返回多个字段的自定义函数。
用户代码需继承此类,编写 process(Object[]) 方法来完成具体的数据操作,实现一个 UDTF 的功能。
行数据输出的过程通过调用 forward(Object...) 实现。
| Constructor and Description |
|---|
UDTF() |
| Modifier and Type | Method and Description |
|---|---|
void |
close()
|
UDTFCollector |
getCollector()
获取
UDTF的默认UDTFCollector对象。 |
OdpsType[] |
initialize(OdpsType[] inputTypes)
Deprecated.
|
abstract void |
process(Object[] args)
用户代码必须实现
process(Object[])方法。 |
OdpsType[] |
resolve(OdpsType[] inputTypes)
Deprecated.
|
TypeInfo[] |
resolve(TypeInfo[] typeInfos)
用于输入、输出类型
TypeInfo 之间的转换,默认调用 resolve(OdpsType[])
不存在转换问题通常不需要关心。 |
void |
setCollector(UDTFCollector collector)
设置
UDTFCollector,以便该 UDTFCollector 对象与 UDTF 实例相关联。 由于 UDTF 可能会在 UDTFCollector 构造之前被初始化,所以不能在 UDTF
的构造函数中指定 UDTFCollector 。 |
void |
setup(ExecutionContext ctx)
在
UDTF运行期,在每个Worker内setup(ExecutionContext)会被先调用一次。 |
@Deprecated public OdpsType[] initialize(OdpsType[] inputTypes) throws Exception
OdpsType 之间的转换inputTypes - 输入的类型Exception - 任何异常均会抛出
建议使用 Resolve 替代@Deprecated public OdpsType[] resolve(OdpsType[] inputTypes) throws UDFException
OdpsType 之间的转换,默认调用 initialize(OdpsType[])
不存在转换问题通常不需要关心。inputTypes - 输入的类型UDFException - 通用UDF异常public TypeInfo[] resolve(TypeInfo[] typeInfos) throws UDFException
TypeInfo 之间的转换,默认调用 resolve(OdpsType[])
不存在转换问题通常不需要关心。typeInfos - 输入的类型UDFException - 通用UDF异常public void setup(ExecutionContext ctx) throws UDFException
UDTF运行期,在每个Worker内setup(ExecutionContext)会被先调用一次。
默认实现为空实现,用户代码可以通过覆盖此方法,在setup(ExecutionContext)中完成初始化的工作。
setup in interface ContextFunctionctx - UDF所在运行时上下文信息,包括UDF所在的StageID、WorkerID等信息UDFException - 通用UDF异常public abstract void process(Object[] args) throws UDFException, IOException
process(Object[])方法。
对SQL中每一条记录,process(Object[])方法都会被调用一次。
args - 参数数组,对应SQL调用时的参数。UDFException - 通用UDF异常IOExceptionpublic void close()
throws UDFException
close in interface ContextFunctionUDFException - 通用UDF异常public void setCollector(UDTFCollector collector)
UDTFCollector,以便该 UDTFCollector 对象与 UDTF 实例相关联。 UDTF 可能会在 UDTFCollector 构造之前被初始化,所以不能在 UDTF
的构造函数中指定 UDTFCollector 。
设置一个实现UDTFCollector接口的对象。注意:如果在运行期户代码通过调用此方法覆盖默认的UDTFCollector对象,将会造成UDTF无法正常输出。
collector - 一个实现了UDTFCollector接口的对象。UDTFCollectorpublic UDTFCollector getCollector()
UDTF的默认UDTFCollector对象。
UDTF在运行时,会被初始化一个实现了UDTFCollector接口的对象,用户代码通过 forward(Object...)
间接调用 UDTFCollector.collect(Object[]),将结果输出。
UDTFCollector接口的对象。UDTFCollectorCopyright © 2023 Alibaba Cloud Computing. All rights reserved.