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 867127831 <86...@qq.com> on 2020/07/17 09:26:58 UTC

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

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内部是有做什么优化吗,导致每次调用返回的结果都一样?

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

Posted by Jun He <86...@qq.com>.
感谢,是这个原因。



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

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

Posted by Benchao Li <li...@apache.org>.
是的,这种就被当做常量被优化掉了。
你可以覆盖一下ScalarFunction#isDeterministic方法,说明你这个函数时非确定性的,就不会被优化掉了。

867127831 <86...@qq.com> 于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