当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。

测试各种内置函数的快捷方法:

创建一个 dual 表

create table dual(id string);

load 一个文件(只有一行内容:内容为一个空格)到 dual 表

新建 JAVA maven 项目

添加依赖

<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

编写一个 java 类,继承 UDF,并重载 evaluate 方法

import org.apache.hadoop.hive.ql.exec.UDF;

/**
* hive的自定义函数
*/
public class ItcastFunc extends UDF{
//重载
public String evaluate(String input){
return input.toLowerCase();//将大写字母转换成小写
} public int evaluate(int a,int b){
return a+b;//计算两个数之和
}
}

打成 jar 包上传到服务器

将 jar 包添加到 hive 的 classpath

  

hive>add JAR /root/hivedata/udf.jar;

创建临时函数与开发好的 java class 关联

create temporary function udffunc as 'hive.udf.UDFFunc';//temporary表示为临时方法,当会话结束后失效;udffunc为hive中定义的函数名,‘hive.udf.UDFFunc’为自定义方法的全类路径

在 hive中使用自定义的函数

select udffunc("ABC") from dual;//输出abc
select udffunc(2,3) from dual;//输出5

最新文章

  1. canvas初体验之加载图片
  2. ASP.NET本质论第一章网站应用程序学习笔记1
  3. CSS权威指南 - 基本视觉格式化 1
  4. MySQL 存储过程删除大表
  5. Android 上拉加载更多功能
  6. Notify和NotifyAll的区别?
  7. 在Django中使用ORM创建图书管理系统
  8. 深度学习基础(四) Dropout_Improving neural networks by preventing co-adaptation of feature detectors
  9. Java笔记Spring(七)
  10. json和jquery中的ajax
  11. html中script标签的使用方法
  12. layui之确认框
  13. vue上传图片
  14. [luogu2296][寻找道路]
  15. Ubuntu下搭建JAVA开发环境及卸载
  16. 高性能Java RPC框架Dubbo与zookeeper的使用
  17. C语言终极面试及答案分析
  18. JavaScript中的继承模式总结(九)
  19. [Ubuntu Version] 如何在terminal 查看当前 ubuntu的版本号
  20. [学习]Windows server 使用控制台时容易卡死的解决方法

热门文章

  1. php 常用字符集
  2. LOJ6503. 「雅礼集训 2018 Day4」Magic(容斥原理+NTT)
  3. wamp下localhost目录Your Projects下项目无法打开解决方案
  4. nodejs下载器,通过chrome代理下载http资源
  5. ndoejs解析req,伪造http请求
  6. postgresql 的一些操作
  7. 公钥,私钥,数字签名,SSL的基本概念
  8. PIE SDK PCA融合
  9. 转帖 JS的基础语法2
  10. web安全漏洞种类