请教大家如何注册支持多返回值类型的UDAF

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

请教大家如何注册支持多返回值类型的UDAF

silence-2
如题,最近想实现一些类似于LAST_VALUE之类的UDAF,看了官网文档自己写了一下目前有以下一些疑问:
    1、聚合结果需要重写AggregateFunction的getValue方法,而该方法需要返回固定的数据类型,如果要实现不同返回值的UDAF是否需要进行多个实现?
    ​2、如果是需要多个实现类的话如何注册到同一个方法名上?测试发现后注册的UDAF会覆盖之前的注册,也就是只有最后注册的UDAF生效,还是只能支持一种数据类型
    ​3、看了源码中的aggFuction的注册过程,发现也是对不同的数据类型进行了多次实现,然后在使用时根据参数的类型进行不同的实现类的创建,最后的疑问就是现有基于现有的flink api如果实现类似的效果呢?
感谢大佬们的解答

Reply | Threaded
Open this post in threaded view
|

Re: 请教大家如何注册支持多返回值类型的UDAF

Jark
Administrator
这块可以看下 custom type inference 的文档:
https://ci.apache.org/projects/flink/flink-docs-master/dev/table/functions/udfs.html#custom-type-inference

On Wed, 16 Sep 2020 at 20:46, silence <[hidden email]> wrote:

> 如题,最近想实现一些类似于LAST_VALUE之类的UDAF,看了官网文档自己写了一下目前有以下一些疑问:
>
>     1、聚合结果需要重写AggregateFunction的getValue方法,而该方法需要返回固定的数据类型,如果要实现不同返回值的UDAF是否需要进行多个实现?
>
>     ​2、如果是需要多个实现类的话如何注册到同一个方法名上?测试发现后注册的UDAF会覆盖之前的注册,也就是只有最后注册的UDAF生效,还是只能支持一种数据类型
>     ​3、看了源码中的aggFuction的注册过程,发现也是对不同的数据类型进行了多次实现,然后在使用时根据参数的类型进行不同的实现类的创建,最后的疑问就是现有基于现有的flink
> api如果实现类似的效果呢?
> 感谢大佬们的解答
>
>