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要一致。

详细样例:  解析 文件

 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  * 读取下 文档,获得document对象。
11  */
12 
13 public class analysis  extends UDF {
14 
15     public String evaluate(String st ) throws DocumentException {
16         /**
17          * 节点对象的操作方法
18          */
19         // Document document = reader.read(new File("test. ")); //解析 文件
20         String   = st .toString();
21         Document document = DocumentHelper.parseText( ); // 解析 字符串
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  下载地址: dom4j-1.6.1.jar

 

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

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

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

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

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

    

收藏 打印