定义的Spark永久UDF,可以在Metastore中看到,但不能在Spark上的hive SQL中使用

时间:2017-04-07 07:43:08

标签: apache-spark hive

CREATE FUNCTION hello AS 'com.dtstack.main.udf.HelloUDF' USING JAR 'hdfs:///172.16.1.151:9000/user/spark/sparkUDF.jar'

并使用

select hello(xcval) from xctable
  

错误:org.apache.spark.sql.AnalysisException:未定义的函数:   '你好&#39 ;.此功能既不是注册的临时功能也不是   在数据库中注册的永久功能'默认'。第1行   7

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

要在hive中创建永久函数,您需要将jar放在hive.auxiliary.path上。

hive.auxiliary.path是hive读取udf的默认位置,如果您的jar文件在您无法访问它的位置上不可用。

因为当你创建一个函数时,hive知道jar的位置为“hdfs:///172.16.1.151:9000 / user / spark / sparkUDF.jar”但是为了使它可用于spark你必须部署它在辅助路径上,因为一旦您的蜂巢会话关闭,蜂巢只会存储您的功能的定义,但不会存储位置和位置,它将进入辅助路径。

有关udf部署的更多信息,请查看https://www.cloudera.com/documentation/enterprise/5-4-x/topics/cm_mc_hive_udf.html