将 UDF 方法作为参数传递给 KSQL 中的其他 UDF

Posted

技术标签:

【中文标题】将 UDF 方法作为参数传递给 KSQL 中的其他 UDF【英文标题】:Pass UDF method as parameter to other UDF in KSQL 【发布时间】:2021-03-27 11:12:56 【问题描述】:

我正在为 KSQL 引擎实现自定义库(使用 UDF),我想知道如何解决我遇到的问题之一。

我已经定义了几个 UDF,它们对传递的参数做一些事情并返回一些输出。 现在,我需要将这些 UDF(它们的调用)传递给其他 UDF。 所以结构看起来像这样:

SELECT * FROM stream s WHERE UDF_1(UDF_11(s.param1, s.param2), UDF_12(s.param3, s.param4), ...) EMIT CHANGES;

是否可以定义将其他 UDF 作为参数的 UDF?如果是,我该如何实现? 如果没有,请分享您对我如何解决问题的想法。

提前感谢您的帮助。

【问题讨论】:

没想到,谢谢! 【参考方案1】:

我假设您在问方法定义的参数应该是什么?

UDF 将返回单个值,并且函数将由内而外进行评估,因此它们不是“将 UDF 作为参数”,只是返回值,通常是原始 java 类型

例如,如果你拆分一个字符串列,然后将其转换为一个 int,它必须看起来像 CAST(STRSPLIT(c, delim)[0] AS INT),其中转换运算符接受任何对象(这里是一个字符串),并返回一个整数,它可以进一步传递给更多的 UDF

【讨论】:

以上是关于将 UDF 方法作为参数传递给 KSQL 中的其他 UDF的主要内容,如果未能解决你的问题,请参考以下文章

Pig 将关系作为参数传递给 UDF

如何将 Set/HashSet 作为参数传递给 Spark 中的 UDF?

如何将复杂的 Java 类对象作为参数传递给 Spark 中的 Scala UDF?

Pyspark 将函数作为参数传递给 UDF

将查询作为参数传递给 udf 函数

PySpark - 将列表作为参数传递给 UDF + 迭代数据框列添加