IDEA构建Hive的UDF函数

云计算 waitig 1011℃ 百度已收录 0评论

一、编译目的
hive自带了很多内置函数,但是这些函数并不能满足我们的日常工作。当我们频繁需要使用一个函数而hive又没有时就需要我们自定义函数了。

二、UDF(user defined function)函数构建步骤
1、自定义一个Java类
2、继承UDF类
3、重写evaluate方法
4、打成jar包
6、在hive执行add jar方法
7、在hive执行创建模板函数
8、hql中使用

三、使用idea+maven构建
1、pom文件加入以下信息

<properties>
  <project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
  <!--Hadoop版本更改成自己的版本-->
    <hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
    <hive.version>1.1.0-cdh5.7.0</hive.version>
</properties>

  <!--加入Hadoop原生态的maven仓库的地址-->
   <repository>
      <id>Apache Hadoop</id>
      <name>Apache Hadoop</name>
      <url>https://repo1.maven.org/maven2/</url>
   </repository>
 <!--加入cdh的maven仓库的地址-->
<repository>
    <id>cloudera</id>
    <name>cloudera</name>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
   </repository>
  </repositories>

  <dependencies>
  <!--添加hadoop依赖-->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>${hadoop.version}</version>
    </dependency>
     <!--添加hive依赖-->
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-exec</artifactId>
      <version>${hive.version}</version>
    </dependency>

2、自定义java类

package com.ruozedata.hive;

import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
//函数功能描述及举例
@Description(name = "SayHello",
        value = "_FUNC_(input_str) - returns Hello:input",
        extended =  "Example:\n "
                + "  > SELECT _FUNC_('zhangsan') FROM src LIMIT 1;\n"
                + "  'Hello:zhangsan'")
 // 继承UDF类
public class HelloUDF2 extends UDF{
  //重写evaluate方法 
    public Text evaluate(Text input){
        return new Text("Hello:"+input);

    }

    public static void main(String[] args) {
       HelloUDF2 UDF=new HelloUDF2();
       System.out.print(UDF.evaluate(new Text("zhangsan")));
    }

}

3、打成jar包
在自己项目D:\hdoopspace\target目录下
hive-train-1.0.jar

4、将jar包上传并添加到hive

hive (default)> add jar /tmp/data/hive-train-1.0.jar;

5、创建模板函数

hive (default)>CREATE TEMPORARY FUNCTION sayHello AS 'com.ruozedata.hive.HelloUDF2';

6、hql使用UDF

hive (default)> select ename,sayhello(ename) from emp;
OK
ename   _c1
SMITH   Hello:SMITH
ALLEN   Hello:ALLEN
WARD    Hello:WARD
JONES   Hello:JONES
MARTIN  Hello:MARTIN
BLAKE   Hello:BLAKE
CLARK   Hello:CLARK
SCOTT   Hello:SCOTT
KING    Hello:KING
TURNER  Hello:TURNER
ADAMS   Hello:ADAMS
JAMES   Hello:JAMES
FORD    Hello:FORD
MILLER  Hello:MILLER
HIVE    Hello:HIVE
Time taken: 0.131 seconds, Fetched: 15 row(s)

四、注意点
以上方法只是单session的而且是临时有效的,也就是只在当前session有用。后续会给大家奉上将UDF函数注册到hive源码当中,那么自己写的函数也就成了hive的内置函数了。


本文由【waitig】发表在等英博客
本文固定链接:IDEA构建Hive的UDF函数
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)