Hive 自定义函数函数
来源:互联网 发布:Java 优化网站 编辑:程序博客网 时间:2024/05/17 07:26
使用内置的函数无法完成分析任务,那么需要写自定义函数
show functions; //查看自带的所有的内置函数
desc function upper; //查看具体的某个函数的用法
desc function extended upper; //带有具体案例
分三类
UDF 一进一出 处理原文件内容某些字段包含 [] ""
UDAF 多进一出 sum() avg() max() min()
UDTF 一进多出 手机号 -> 国家 省 市
UDF函数的开发
** 必须继承UDF类
** 必须evaluate函数 支持重载
** 必须要有返回类型,可以返回null,但是返回类型不能为void
** 建议使用Text/LongWritable
1.创建一个maven项目
2.修改pom.xml文件
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>0.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>0.13.1</version>
</dependency>
3.替换repository
4.包含hive的依赖的jar的repository
代码实现(注意必须实现一个名为evaluate的方法)
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class SalaryUDF extends UDF{
public Text evaluate(Text salaryText){
Text text = new Text();
//1.判断salaryText是否为null
if (salaryText == null) {
return null;
}
//2.判断salaryText是否可转换为一个double类型
double salary = 0;
try {
salary = Double.valueOf(salaryText.toString());
} catch (NumberFormatException e) {
e.printStackTrace();
return null;
}
if (salary > 3000) {
text.set("大于3000的一组...");
return text;
}else if (salary <= 3000 && salary > 2000) {
text.set("小于等于3000并且大于2000的一组...");
return text;
}else {
text.set("小于等于2000的一组");
return text;
}
}
}
5.编写使用UDF
1、编程
2、把程序到出为jar包放到目标机器上去:
hive> add jar /home/beifeng/jars/lower.jar ;
3、创建临时函数:
hive> CREATE TEMPORARY FUNCTION my_lower AS 'org.apache.hadoop.udf.Lower';
4、使用指定函数:
hive> show fuctions ;
hive> select my_lower(ename) from emp ;
阅读全文
0 0
- Hive 自定义函数函数
- Hive 自定义函数函数
- 自定义-Hive自定义函数
- HIVE中的自定义函数
- hive用户自定义函数
- HIVE中的自定义函数 .
- HIVE中的自定义函数
- HIVE 自定义函数 UDF
- HIVE中的自定义函数
- hive中的自定义函数
- Hive自定义函数
- Hive自定义函数
- Hive自定义函数
- HIVE 自定义函数
- hive 自定义函数扩展
- Hive--自定义函数
- HIVE自定义函数类型
- Hive中自定义函数
- MySQL数学函数大全
- 单链表(头指针)
- Python
- HAXM installer NOT compatible with windows 的解决方法
- javascript(一)
- Hive 自定义函数函数
- 51nod 1001 数组中和等于K的数对
- 【JAVA】HDU 1312 Red and Black(DFS水题)
- 农夫约翰为了修理栅栏,要将一块很长的木块切割成N块,准备切成的木板的长度为L1,L2...LN,未切割前的木板的长度恰好为切割后木板的长度的总和,每次切断木板的时候,需要的开销为这块木板的长度,例如长
- 2017第三次多校联合hdu6060
- C++学习(1)
- HDU1465 不容易系列之一
- Object...values可变参数和Object[] values区别
- 腾讯第一次面试