You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by silence <sl...@aliyun.com.INVALID> on 2020/09/16 12:45:55 UTC

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

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


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

Posted by Jark Wu <im...@gmail.com>.
这块可以看下 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 <sl...@aliyun.com.invalid> wrote:

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