我们在工作中最常用的应该就是UDF一进一出函数了,因此我给大家准备了一个大小写转换的例子希望可以帮到大家
pom如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wy</groupId>
<artifactId>func</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
</project>
代码如下:
package com.wy.fun;
import org.apache.hadoop.hive.ql.exec.UDF;
public class ToUpper extends UDF {
/**
* 此方法的格式除了返回值类型、形参之外都不要变
* 不然会出现一些默认其妙的问题
*/
public static String evaluate(final String s){
return s.toUpperCase();
}
}
如果有条件最好是使用Hadoop自己的数据类型如Text那些,因为有时候直接使用JAVA的类型会导致这个函数直到注册为止虽然不会出问题,但是一旦使用就会报错提示数据类型或函数不可用,不过这种情况少,真碰见了就含泪自认运气吧
最后连接Hadoop将编译好的jar上传的hdfs上,之后使用如下语句操作函数的创建
//add语句使用一般是jar在hive的jar路径下才用,如果大家工作有这种需求就用add,当然它也可以加载hdfs上的jar,但是我不会告诉你们我忘了是怎么写的了,哈哈哈哈
add jar myudf.jar;
//add之后直接就可以运行create语句,加上temporary 创建的是临时函数,断开hive之后该函数失效,不加建立的是永久函数
create temporary function myudf as 'com.wy.ToUpper';
//上面是jar放在了hive的lib下,如果我们的jar就在hdfs上那么我们直接使用下面这个语句就可以,同样的加上temporary 创建的是临时函数,断开hive之后该函数失效,不加建立的是永久函数
create function myudf as 'com.wy.ToUpper' using jar 'hdfs://wy:9000/myudf.jar';
//临时函数可以直接删除,但永久函数不可直接删除,只能从元数据库的FONC表中入手删除,还不一定可以删成功
drop temporary function myudf;
我们使用的时候直接和其他的内建函数一样就可以了