On this page
HivePlugins
创建自定义 UDF
首先,您需要创建一个扩展 UDF 的新类,并使用一个或多个名为 valuate 的方法。
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class Lower extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
(请注意,已经有一个内置函数,这只是一个简单的示例)。
将代码编译到 jar 中之后,需要将其添加到 HiveClasspath 中。请参阅下面有关部署 jar 的部分。
一旦 Hive 在 jar 中的 Classpath 中启动,最后一步就是按照Create Function中的描述注册您的函数:
create temporary function my_lower as 'com.example.hive.udf.Lower';
现在您可以开始使用它了:
hive> select my_lower(title), sum(freq) from titles group by my_lower(title);
...
Ended Job = job_200906231019_0006
OK
cmo 13.0
vp 7.0
有关更多示例,请参见this page。
从Hive 0.13开始,您可以按照Permanent Functions中的说明,在当前数据库或指定数据库中将功能注册为永久 UDF。例如:
create function my_db.my_lower as 'com.example.hive.udf.Lower';
为用户定义的功能和用户定义的 SerDes 部署 Jars
为了开始使用 UDF,首先需要将代码添加到 Classpath 中:
hive> add jar my_jar.jar;
Added my_jar.jar to class path
默认情况下,它将在当前目录中查找。您还可以指定完整路径:
hive> add jar /tmp/my_jar.jar;
Added /tmp/my_jar.jar to class path
然后,您的 jar 将在该会话中启动的所有作业的 Classpath 中。要查看已将哪些罐子添加到 Classpath,可以使用:
hive> list jars;
my_jar.jar
有关完整的语法和更多示例,请参见Hive CLI。
从Hive 0.13开始,UDF 还可以选择在CREATE FUNCTION语句中指定所需的 jar:
CREATE FUNCTION myfunc AS 'myclass' USING JAR 'hdfs:///path/to/jar';
这会将 jar 添加到 Classpath 中,就好像在该 jar 上已调用 ADD JAR 一样。