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