Scalar UDF隐式注册语法
隐式注册的含义是依赖Python运行时自动发现并注册Scalar UDF。用户不需要在Python代码中侵入式添加注册逻辑代码,而是使用@装饰器修饰原始Python函数,然后在DataFrame中使用被装饰的原始Python函数的标识符,即可完成注册。隐式注册在使用@装饰器时不需要获得backend会话对象,后续在ibis DataFrame中获取backend会话对象。
推荐使用隐式注册的场景:如果用户希望无侵入式的注册Scalar UDF,且对同一个Backend连接下的Scalar UDF注册和使用分离无要求。
一个典型的场景是1个用户的Python脚本中直接写了整个UDF的注册和使用全流程。
UDF类型 |
UDF类型(二级) |
代码入口 |
参考 |
---|---|---|---|
udf |
python |
@fabric.udf.python(<注册参数>) |
|
builtin |
@fabric.udf.builtin(<注册参数>) |
对于隐式注册,实际注册动作的发生时间根据DataFrame操作模式Lazy、Eager有所区别。
参考上文提及的ibis官方文档,对于DataFrame的操作分为Eager、Lazy两种模式,由配置项ibis.options.interactive控制,默认为False,即所有的DataFrame都默认是Lazy模式。对于两种DataFrame执行模式,UDF注册的发生时间不同,详情说明如下:
ibis.options.interactive |
DataFrame执行模式 |
UDF注册时间 |
UDF使用时间 |
---|---|---|---|
False |
Lazy |
整个DataFrame调用execute方法时 |
整个DataFrame调用execute方法时 |
True |
Eager |
第一次在DataFrame中使用 |
每一次在DataFrame中使用 |