flink不带参数的udf始终返回第一次调用的结果

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

flink不带参数的udf始终返回第一次调用的结果

Jun He
hi, 我有一个不带参数的udf,用于返回系统当前时间的字符串格式,但是调用时每次都返回这个udf第一次调用的结果,所以拿到的时间全部都是一样的


udf的实时如下:


public class GetTimeFunc extends ScalarFunction {
        public String eval() {
                return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        }
}



请问,针对这种没有入参的udf,flink内部是有做什么优化吗,导致每次调用返回的结果都一样?
Reply | Threaded
Open this post in threaded view
|

Re: flink不带参数的udf始终返回第一次调用的结果

Benchao Li-2
是的,这种就被当做常量被优化掉了。
你可以覆盖一下ScalarFunction#isDeterministic方法,说明你这个函数时非确定性的,就不会被优化掉了。

867127831 <[hidden email]> 于2020年7月17日周五 下午5:27写道:

> hi, 我有一个不带参数的udf,用于返回系统当前时间的字符串格式,但是调用时每次都返回这个udf第一次调用的结果,所以拿到的时间全部都是一样的
>
>
> udf的实时如下:
>
>
> public class GetTimeFunc extends ScalarFunction {
>         public String eval() {
>                 return new SimpleDateFormat("yyyy-MM-dd
> HH:mm:ss").format(new Date());
>         }
> }
>
>
>
> 请问,针对这种没有入参的udf,flink内部是有做什么优化吗,导致每次调用返回的结果都一样?



--

Best,
Benchao Li
Reply | Threaded
Open this post in threaded view
|

Re: flink不带参数的udf始终返回第一次调用的结果

Jun He
感谢,是这个原因。



--
Sent from: http://apache-flink.147419.n8.nabble.com/