经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
hive 自定义udf 编写
来源:cnblogs  作者:SamaelB  时间:2018/10/12 9:34:26  对本文有异议

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.  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  下载地址: 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 文件夹下

    

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号