首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从Spark中使用现有的Hive永久UDF

无法从Spark中使用现有的Hive永久UDF
EN

Stack Overflow用户
提问于 2016-08-18 16:52:23
回答 2查看 15.5K关注 0票数 25

我以前注册过一个带有蜂巢的UDF。它是永久性的,而不是TEMPORARY。它在直线上工作。

代码语言:javascript
复制
CREATE FUNCTION normaliseURL AS 'com.example.hive.udfs.NormaliseURL' USING JAR 'hdfs://udfs/hive-udfs.jar';

我已经配置了电火花来使用蜂巢亚稳态。配置正在工作,因为我可以查询单元表。我可以看到UDF;

代码语言:javascript
复制
In [9]: spark.sql('describe function normaliseURL').show(truncate=False)
+-------------------------------------------+
|function_desc                              |
+-------------------------------------------+
|Function: default.normaliseURL             |
|Class: com.example.hive.udfs.NormaliseURL  |
|Usage: N/A.                                |
+-------------------------------------------+

但是,我不能在sql语句中使用UDF;

代码语言:javascript
复制
spark.sql('SELECT normaliseURL("value")')
AnalysisException: "Undefined function: 'default.normaliseURL'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7"

如果我试图用spark注册UDF (绕过亚稳态),它就没有注册它,这表明它已经存在了。

代码语言:javascript
复制
In [12]: spark.sql("create function normaliseURL as 'com.example.hive.udfs.NormaliseURL'")
AnalysisException: "Function 'default.normaliseURL' already exists in database 'default';"

我用的是Spark2.0,蜂巢亚稳态1.1.0。UDF是scala,我的火花驱动程序代码是python。

我很困惑。

  • 我是否正确的假设,星火可以利用亚稳态定义的永久UDF?
  • 我在蜂巢中正确地创建了函数吗?
EN

回答 2

Stack Overflow用户

发布于 2017-08-28 18:13:30

问题是Spark2.0无法执行其JAR位于HDFS上的函数。

Spark : Thriftserver无法运行已注册的Hive UDTF

解决方法之一是将函数定义为星火作业中的临时函数,jar路径指向本地边缘节点路径。然后调用同一个火花作业中的函数。

代码语言:javascript
复制
CREATE TEMPORARY FUNCTION functionName as 'com.test.HiveUDF' USING JAR '/user/home/dir1/functions.jar'
票数 2
EN

Stack Overflow用户

发布于 2016-12-20 22:38:58

它将工作在火花上的纱线环境,然而,如建议,您需要使用spark-shell --jars <path-to-your-hive-udf>.jar,不是在hdfs,而是在本地。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39023638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档