gpt4 book ai didi

apache-spark - 无法使用来自 Spark SQL 的现有 Hive 永久 UDF

转载 作者:行者123 更新时间:2023-12-03 11:02:58 26 4
gpt4 key购买 nike

我之前在 hive 注册了一个 UDF。不是永久的TEMPORARY .它在直线上工作。

CREATE FUNCTION normaliseURL AS 'com.example.hive.udfs.NormaliseURL' USING JAR 'hdfs://udfs/hive-udfs.jar';

我已将 spark 配置为使用 hive Metastore。配置正在工作,因为我可以查询配置单元表。我可以看到UDF;
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;
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(绕过 Metastore)注册 UDF,则无法注册它,表明它确实已经存在。
In [12]: spark.sql("create function normaliseURL as 'com.example.hive.udfs.NormaliseURL'")
AnalysisException: "Function 'default.normaliseURL' already exists in database 'default';"

我使用的是 Spark 2.0,hive Metastore 1.1.0。 UDF 是 scala,我的 spark 驱动程序代码是 python。

我难住了。
  • 我认为 Spark 可以使用元存储定义的永久 UDF 的假设是否正确?
  • 我是否在 hive 中正确创建了函数?
  • 最佳答案

    问题是 Spark 2.0 无法执行 JAR 位于 HDFS 上的函数。

    Spark SQL: Thriftserver unable to run a registered Hive UDTF

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

    CREATE TEMPORARY FUNCTION functionName as 'com.test.HiveUDF' USING JAR '/user/home/dir1/functions.jar'

    关于apache-spark - 无法使用来自 Spark SQL 的现有 Hive 永久 UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39023638/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com