首页 > 解决方案 > 如何在从 jdbc 读取表之前注册 hive udf

问题描述

我在 hive 中创建了一个 UDF,例如:

create function mydb.level as 'com.my.udf.level' using jar 
'hdfs://hadoop01:8020/user/hive/udf_jars/dbtools-1.0-SNAPSHOT.jar';

现在,我想使用 spark 从 hive 表中读取数据,如下所示:

spark.read().jdbc(myurl, "(select level(id) from my_tbl)t", prop);

它失败了。我如何level()jdbcapi中使用。

标签: sqlapache-sparkjdbchiveuser-defined-functions

解决方案


当您将 Hive UDF 注册为永久函数时,它与创建它的数据库相关联,您还需要在调用 UDF 时指明数据库。因此,在您的情况下,您需要按如下方式调用 udf:

spark.read().jdbc(myurl, "(select mydb.level(id) from my_tbl)t", prop);

推荐阅读