看来一个常规的Hive语句应该能起作用。在我运行的script.sql中 spark-sql --jars mylib.jar myscript.sql
```
CREATE TEMPORARY FUNCTION rank AS 'com.mycompany.udf.Custom.rankFunc';
...
CREATE TEMPORARY VIEW MyTable AS (
SELECT
rank(id) AS rank,
...
在scala代码(mylib.jar)中:
package com.mycompany.udf
...
object Custom {
def rankFunc(id: Long): Double = { Rank(id).rank }
....
}
但是,配置单元代码没有看到此函数。
18/01/23 17:38:25 ERROR SparkSQLDriver: Failed in [
CREATE TEMPORARY FUNCTION rank AS 'com.mycompany.udf.Custom.rankFunc']
java.lang.ClassNotFoundException: com.mycompany.udf.Custom.rankFunc
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
如何更改scala库中的代码?
2条答案
按热度按时间ep6jt1vc1#
因为有很多困惑,我正在更新我的答案:
以下是md5 jave代码的代码:
我拿了 hive 里用的jar,能让它工作:
这对我很有用:
在我用过的 hive 里:
使用jar'/test/balaram/hive-md5.jar创建临时函数md5作为'org.apache.hadoop.hive.ql.udf.udfmd5';
在我使用的spark中:
将临时函数md5创建为“org.apache.hadoop.hive.ql.udf.udfmd5”
如果这没用,我很抱歉
gzjq41n42#
出现此错误是因为配置单元希望函数是类,而不是方法名。
将scala代码(udf)更改为:
... 和sql脚本:
下面是如何使用java和scala创建自定义udf的示例。