在Spark中使用Hive注册UDF



我在Hive中使用以下命令直线注册一个udf:

CREATE FUNCTION udfTest AS 'my.udf.SimpleUDF' USING JAR 'hdfs://hostname/pathToMyJar.jar'

那么我可以像下面这样直线使用它:

SELECT udfTest(name) from myTable;

返回预期结果。

然后启动spark-shell并运行以下命令

sqlContext.sql("SELECT udfTest(name) from myTable")

而失败。该堆栈有几百行长(我不能粘贴在这里),但关键部分是:

  • org.apache.spark.repl。$TranslatingClassLoader不能转换为java.net.URLClassLoader
  • default.udftest:java.lang无法加载资源。[/tmp/blarg/pathToMyJar.jar]

如果有什么特别的,我可以提供更多的细节。

是否可以在Spark中使用Hive注册的udf ?

Spark Version 1.3.0

当使用自定义UDF时,确保您的UDF的jar文件包含在您的应用程序中,在启动spark-shell时使用——jars命令行选项指定UDF文件作为参数,如下所示

./bin/spark-shell --jars <path-to-your-hive-udf>.jar

详细信息请参见从Spark调用Hive自定义函数

我们最近遇到了同样的问题。我们注意到,如果jar路径在本地可用,那么一切都会顺利进行。如果jar路径在HDFS上,它不起作用。所以我们最后做的是使用FileSystem在本地复制jar。copytoLocalFile,然后添加复制的文件。在集群和客户端模式下为我们工作

p。这是Spark 2.0,我说的是

最新更新