Apache spark 定义的Spark永久UDF可以在metastore中看到,但不能在Spark上的配置单元SQL中使用
使用Apache spark 定义的Spark永久UDF可以在metastore中看到,但不能在Spark上的配置单元SQL中使用,apache-spark,hive,Apache Spark,Hive,使用 CREATE FUNCTION hello AS 'com.dtstack.main.udf.HelloUDF' USING JAR 'hdfs:///172.16.1.151:9000/user/spark/sparkUDF.jar' 错误:org.apache.spark.sql.AnalysisException:未定义的函数: “你好”。此函数既不是已注册的临时函数,也不是 在数据库“默认”中注册的永久函数。;第1行位置 七, 有人能帮我吗?要在hive中创建永久函数,需要将ja
CREATE FUNCTION hello AS 'com.dtstack.main.udf.HelloUDF' USING JAR 'hdfs:///172.16.1.151:9000/user/spark/sparkUDF.jar'
错误:org.apache.spark.sql.AnalysisException:未定义的函数:
“你好”。此函数既不是已注册的临时函数,也不是
在数据库“默认”中注册的永久函数。;第1行位置
七,
有人能帮我吗?要在hive中创建永久函数,需要将jar放在hive.auxiliary.path上 hive.auxiliary.path是配置单元读取udf的默认位置,如果您的jar文件在该位置不可用,您将无法访问它
因为创建函数时,hive知道jar的位置为“hdfs:///172.16.1.151:9000/user/spark/sparkUDF.jar“但要使spark可用,您必须将其部署在辅助路径上,因为一旦您的配置单元会话关闭,配置单元只存储函数的定义,而不存储位置,对于位置,它将转到辅助路径
有关udf部署的更多信息,请查看当我仅使用hive时,它是有效的,但当我使用spark时,它会出现上述问题。因为当您创建函数时,hive知道jar的位置为“hdfs:///172.16.1.151:9000/user/spark/sparkUDF.jar"但是为了使spark可用,您必须将其部署在辅助路径上,因为一旦您的配置单元会话关闭,配置单元只存储函数的定义,而不存储位置,对于位置,它将转到辅助路径。我发现另一个问题。如何注册永久配置单元udf进行编码。它无法更改设置辅助路径的配置。您有解决方案吗。我已经解决了它。这是spark的臭虫。对于添加代码支持hdfs文件。这是临时解决方案。编辑SparkContext.scala。在其中添加跟随行。setURLStreamHandlerFactory(新的FsUrlStreamHandlerFactory());
select hello(xcval) from xctable