Hadoop相关知识TOC
Hive中UDF函数的使用
Hive中如何自定义UDF函数,帮助提升效率。
使用JAR包的方式
例如需要实现求数组的最大值,Hive中将数组定义为了字符串,我们需要求该数组的最大值
示例如下,hive中某一列存为[12,34,56,3]的字符串,需要求其中的最大值,此时用UDF函数做最为方便
(1)相关依赖
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.3</version>
</dependency>
</dependencies>
(2)实现代码
这里先继承UDF类,然后实现evaluate方法
package hadooputils;
import org.apache.hadoop.hive.ql.exec.UDF;
public class getMaxData extends UDF{
public double evaluate(String array){
array = array.replace("[","").replace("]","");
String[] nums = array.split(",");
double[] num_arr = new double[nums.length];
double result=0;
for(int i=0;i<nums.length;i++){
if(nums[i].length()>0){
num_arr[i] = Double.parseDouble(nums[i]);
if(num_arr[i]>result){
result = num_arr[i];
}
}}
return result;
}
}
(3)做成jar包后,上传至hdfs任一文件夹,我上传到了hdfs:/user/hadoop/hiveUDF文件夹下
sudo -u hdfs hadoop dfs -put /tmp/getMaxData.jar hdfs:/user/hadoop/hiveUDF
(4)激活该函数
在hive客户端中输入以下命令
create function warning.getMaxData as 'hadooputils.getMaxData' using jar 'hdfs:/user/hadoop/hiveUDF'
其中warning表示所在的库,在其他库使用getMaxData函数时必须带上warning库,即在其他库调用时使用warning.getMaxData()调用该UDF函数,as后面是包名.UDF类名,最后的jar包是所上传jar的hdfs地址
(5)验证
在default库中使用getMaxData函数,结果如下,验证成功
(6)删除函数
在hive客户端中输入
drop function warning.getMaxData
以上就是hive中udf函数的简单使用和删除了,下次再给大家尝试下用python写hive的udf函数