Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 定义的Spark永久UDF可以在metastore中看到,但不能在Spark上的配置单元SQL中使用_Apache Spark_Hive - Fatal编程技术网

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