欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HIVE 编写自定义函数UDF

程序员文章站 2023-11-11 17:47:40
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类。类中要实 ......

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 文件夹下