我使用以下内容通过beeline在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")
哪个失败了。堆栈有几百行(这里我不能粘贴),但关键部分是:
如果有什么突出的话,我可以提供更多细节。
是否可以在Spark中使用通过Hive注册的UDF?
Spark版本1.3.0
答案 0 :(得分:0)
使用自定义UDF时,请确保应用程序中包含UDF的jar文件, OR 使用--jars命令行选项将UDF文件指定为参数同时启动spark-shell,如下所示
./bin/spark-shell --jars <path-to-your-hive-udf>.jar
答案 1 :(得分:0)
我们最近遇到了同样的问题。我们注意到的是,如果jar路径在本地可用,那么一切都很顺利。如果jar路径在hdfs上,它就不起作用。所以我们最终做的是使用FileSystem.copytoLocalFile在本地复制jar,然后添加复制的文件。在群集和客户端模式下为我们工作
PS。这是Spark 2.0我在谈论