在 spark sql 中注册 UDAF

Posted

技术标签:

【中文标题】在 spark sql 中注册 UDAF【英文标题】:Register UDAF in spark sql 【发布时间】:2019-01-31 20:05:50 【问题描述】:

我想注册一个 UDAF 类(用 Scala 或 Python 编写)并在 Spark SQL 中使用它。 例如: 模拟代码

// mock code:
class MyUDAF extends UserDefinedAggregateFunction
...


spark.udaf.registerJavaFunction("myagg", "MyUDAF",IntegerType)

然后我可以直接在 spark sql 中使用 udaf,如下所示:

spark.sql("select myagg(field) from mytable group by something")

Spark 只提供了 spark.udf.registerJavaFunction 方法来注册一个 UDF 类。

有人知道如何注册 UDAF 吗?

【问题讨论】:

这篇博文使用 Java 开发 UDAF:ankithoodablog.wordpress.com/2017/09/07/… 【参考方案1】:

您可以使用 Hive SQL 注册它。

spark.sql("CREATE FUNCTION myagg AS 'com.mysite.MyUDAF'")
spark.sql("select myagg(field) from mytable group by something")

【讨论】:

【参考方案2】:

你可以对 udaf 做同样的事情:

spark.udf.register("udaf_name", new UdafClass())

然后就可以在 Spark SQL 中使用了。

【讨论】:

以上是关于在 spark sql 中注册 UDAF的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache Spark SQL 中将中值作为窗口函数 (UDAF) 移动

如何在 Spark Databricks 中注册 SQL 函数

Spark之UDAF

详解Spark sql用户自定义函数:UDF与UDAF

Scala 中的 Spark SQL(v2.0) UDAF 返回空字符串

无法在 spark sql 中注册 UDF