[关闭]
@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"

1)依据课程讲解 UDF 编程案例,完成练习,总结开发UDF步骤,代码贴图,给予注释,重点在于体现编程思路;

04.jpg-41.7kB
05.jpg-35.9kB
06.jpg-38.7kB

编写UDF函数的时候需要注意以下几点:

自定义UDF需继成org.apache.hadoop.hive.ql.UDF
需要实现evaluate函数,evaluate函数支持重载
UDF必须要有返回类型,可以返回null,但是返回类型不能为void
UDF中常用Text/LongWritable等类型,不推荐使用java类型 

实现UDF函数步骤

 把程序打包放到目标机器上去;
 进入hive客户端,添加jar包:hive>add jar 目标路径/自定义包名.jar;
 创建临时函数:hive>create temporary function 自定义函数名称 as '代码首行包名.自定义UDF函数类名';   
 使用HQL语句查询
 销毁临时函数:hive>drop temporary function 自定义函数名称;

07.jpg-27.7kB
08.jpg-13.8kB
09.jpg-130.2kB

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"

  1. package org.apache.hadoop.hive.udf;
  2. import org.apache.commons.lang.StringUtils;
  3. import org.apache.hadoop.hive.ql.exec.UDF;
  4. import org.apache.hadoop.io.Text;
  5. public class ReplacetestUDF extends UDF {
  6. public Text evaluate(Text str) {
  7. if (null == str) {
  8. return null;
  9. }
  10. if (StringUtils.isBlank(str.toString())) {
  11. return null;
  12. }
  13. return new Text(str.toString().replaceAll("\"", ""));
  14. }
  15. public static void main(String[] args) {
  16. System.out.println(new ReplacetestUDF()
  17. .evaluate(new Text(
  18. "\"31/Aug/2015:00:04:37 +0800\" \"GET /course/view.php?id=27 HTTP/1.1\"")));
  19. System.out.println(new ReplacetestUDF()
  20. .evaluate(new Text(
  21. "\"31/Aug/2015:00:04:58 +0800\" \"POST /lib/editor/atto/autosave-ajax.php HTTP/1.1\"")));
  22. }
  23. }

10.jpg-45.4kB
11.jpg-84.5kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注