Flink自定义函数

Scala function

需要继承ScalarFunciton类

制表函数(table function 类似UDTF)

自定义该函数时需要继承TableFunctioin<一个类或者Row>

这里泛型中的类的各个属性是转换后表的结构,以下为例,有一个类A,其内部有ID和VALUE两个属性,那么这个A就可以写在泛型中,

public static class tableFunctionName extend TableFunctioin<A>{
    public void eval(...){具体的制表函数}
}

如果不想写POJO或者JavaBean,可以写Row(类似Object),但此时需要借助注解

@FunctionHint(output=@DataTypeHint(“row<ID int, VALUE string>”))
public static class tableFunctionName extend TableFunctioin<A>{
    public void eval(...){具体的制表函数}
}

一行变多行

id value1 value2
1 a b

(制表函数上变下)

id value
1 a
1 b

聚合函数(aggregate function)

自定义该函数时,需要继承AggregateFunction<T,accumulator>

T:聚合后结果的类型

accumulator:累加器

id value
1 a
1 b

变成

id value1 value2
1 a b

表值聚合函数(table aggregate)

自定义该函数时,需要继承TableAggregateFunction<T,accumulator>

T:最终返回的结果的类型

accumulator:累加器

关于表函数的使用说明

各个自定义函数中需要实现一个eval方法

函数需要先进行注册,后使用

tEnv.createTemporayFunction("注册函数的名称",注册函数的类名.class)

参考代码

posted @ 2022-01-06 10:23  KaneQi  阅读(151)  评论(0编辑  收藏  举报