@Arslan6and6
2016-05-23T03:41:03.000000Z
字数 1495
阅读 1104
第七章、大数据仓库Hive深入
---Hive中UDF编程
作业描述:
依据课程中讲解的如何自定义 UDF,进行案例编写,进行总结步骤,并完成额外需求,具体说明
如下 :
1)依据课程讲解 UDF 编程案例,完成练习,总结开发 UDF 步骤,代码贴图,给予注释,重点
在于体现编程思路;
2)完成如下数据字段中去除双引号 ,并测试结果
"31/Aug/2015:00:04:37 +0800" "GET /course/view.php?id=27 HTTP/1.1"
"31/Aug/2015:00:04:58 +0800" "POST /lib/editor/atto/autosave-ajax.php HTTP/1.1"
自定义UDF需继成org.apache.hadoop.hive.ql.UDF
需要实现evaluate函数,evaluate函数支持重载
UDF必须要有返回类型,可以返回null,但是返回类型不能为void
UDF中常用Text/LongWritable等类型,不推荐使用java类型
把程序打包放到目标机器上去;
进入hive客户端,添加jar包:hive>add jar 目标路径/自定义包名.jar;
创建临时函数:hive>create temporary function 自定义函数名称 as '代码首行包名.自定义UDF函数类名';
使用HQL语句查询
销毁临时函数:hive>drop temporary function 自定义函数名称;
"31/Aug/2015:00:04:37 +0800" "GET /course/view.php?id=27 HTTP/1.1"
"31/Aug/2015:00:04:58 +0800" "POST /lib/editor/atto/autosave-ajax.php HTTP/1.1"
package org.apache.hadoop.hive.udf;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class ReplacetestUDF extends UDF {
public Text evaluate(Text str) {
if (null == str) {
return null;
}
if (StringUtils.isBlank(str.toString())) {
return null;
}
return new Text(str.toString().replaceAll("\"", ""));
}
public static void main(String[] args) {
System.out.println(new ReplacetestUDF()
.evaluate(new Text(
"\"31/Aug/2015:00:04:37 +0800\" \"GET /course/view.php?id=27 HTTP/1.1\"")));
System.out.println(new ReplacetestUDF()
.evaluate(new Text(
"\"31/Aug/2015:00:04:58 +0800\" \"POST /lib/editor/atto/autosave-ajax.php HTTP/1.1\"")));
}
}