IDEA构建Hive的UDF函数

来源:互联网 发布:入门鼠标推荐 知乎 编辑:程序博客网 时间:2024/06/03 21:57

一、编译目的
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;OKename   _c1SMITH   Hello:SMITHALLEN   Hello:ALLENWARD    Hello:WARDJONES   Hello:JONESMARTIN  Hello:MARTINBLAKE   Hello:BLAKECLARK   Hello:CLARKSCOTT   Hello:SCOTTKING    Hello:KINGTURNER  Hello:TURNERADAMS   Hello:ADAMSJAMES   Hello:JAMESFORD    Hello:FORDMILLER  Hello:MILLERHIVE    Hello:HIVETime taken: 0.131 seconds, Fetched: 15 row(s)

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

原创粉丝点击