在 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 函数