当前位置: 移动技术网 > IT编程>数据库>其他数据库 > HIVE 编写自定义函数UDF

HIVE 编写自定义函数UDF

2018年10月11日  | 移动技术网IT编程  | 我要评论

hive 编写自定义函数udf

 

eclipse中编写udf

①新建java项目 并添加 hive-exec-2.1.0.jar 和hadoop-common-2.7.3.jar ,保证与集群中的版本一致

②udf类要继承org.apache.hadoop.hive.ql.exec.udf类。类中要实现evaluate。

   当我们在hive中使用自己定义的udf的时候,hive会调用类中的evaluate方法来实现特定的功能
③导出项目为jar文件。
注:项目的jdk与集群的jdk要一致。

详细样例:  解析xml文件

 1 import org.apache.hadoop.hive.ql.exec.udf;
 2 
 3 import java.util.list;
 4 import org.dom4j.document;
 5 import org.dom4j.documentexception;
 6 import org.dom4j.documenthelper;
 7 import org.dom4j.element;
 8 
 9 /**
10  * 读取下xml文档,获得document对象。
11  */
12 
13 public class analysisxml extends udf {
14 
15     public string evaluate(string stxml) throws documentexception {
16         /**
17          * 节点对象的操作方法
18          */
19         // document document = reader.read(new file("test.xml")); //解析xml文件
20         string xml = stxml.tostring();
21         document document = documenthelper.parsetext(xml); // 解析xml字符串
22         // 获取文档根节点
23         element root = document.getrootelement();
24         // 输出根标签的名字
25         // system.out.println(root.getname());
26         // 获取根节点下面的所有子节点(不包过子节点的子节点)
27         list<element> list = root.elements();
28         string contest = "";
29         // 遍历list的方法
30         for (element e : list) {
31             contest += e.getstringvalue() + "|"; // 节点值
32         }
33         return contest;
34 
35         // for (element e:list){
36         // system.out.println(e.getname()); /节点名
37         // }
38 
39     }
40 
41 }

 

注:其中引用了第三方包  dom4j-1.6.1.jar  下载地址:

 

2、自己定义函数调用过程

①加入jar包(在hive命令行里面运行)
hive> add jar /root/analysisxml.jar;

②创建暂时函数 ,hive命令行关闭后,即失效。
hive> create temporary function analysis_xml as ‘analysisxml';

③调用
hive> select id, analysis_xml(contents);

注: jar包中引用第三方包,添加至 ../hive/lib 文件夹下

    

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网