我在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,我说的是