Hive的UDF
时间: 2018-09-14来源:OSCHINA
前景提要
「深度学习福利」大神带你进阶工程师,立即查看>>>
一、编写系定义函数 以jsonParse(json数据分析)为例 依赖jar包:hive-exec-*.jar 继承UDF 方法名:evaluate import org.apache.hadoop.hive.ql.exec.UDF; import net.sf.json.JSONObject; public class JsonParse extends UDF { public String evaluate(String jsonStr,String key) { return JSONObject.fromObject(jsonStr).get(key).toString(); } }
二、加载自定义函数
1. 导出jar包 只需要勾选src下的内容
2. 传输到Linux系统中去 导出的jar包导入到指定目录 导出jar包的依赖包(在hive-bin/lib下不存在的)需要导入到lib包下
3. 加载jar包 在hive中操作 add jar {path} //path指自己封装的jar包
4. 创建函数(函数只在当前会话下生效,关闭会话即失效) 在hive中操作 create temporary function {functionName} as {classPath}
5. 删除函数 drop temporary function {functionName}
6. 配置文件加载(一般写启动脚本,就不必配置此项) hive-site.xml中配置,可以省略导入jar包操作 <property> <name>hive.aux.jars.path</name> <value>$HIVE_HOME/auxlib</value> </property>
7. 初始化文件加载(执行此步操作就不必执行第6步) 启动hive时指定初始化文件,在文件中添加jar包,创建函数 vi init-hive // 脚本内容 add jar /home/bigdata/UDF.jar; create temporary function myfunc as "com.qfedu.edu.FirstUDF"; // 进入hive界面操作时执行上述脚本 hive -i init-hive
8. HiveJDBC加载方式 在执行操作之前完成函数的初始化操作,生产环境中通常会封装为工具类 ep: public class HiveUtil { static { try { // 1.加载驱动 Class.forName("org.apache.hive.jdbc.HiveDriver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public HiveUtil() { open(); Init(); } private void open() { try { // 2.打开连接 Connection connection = DriverManager.getConnection("jdbc:hive2://HADOOP01:10010/"); // 3.获得操作对象 - 会话 statement = connection.createStatement(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void Init() { try { statement.execute("add jar /home/bigdata/udf.jar"); statement.execute("create temporary function sub as 'com.yulang.udf.SubString'"); statement.execute("create temporary function jsonParse as 'com.yulang.udf.JsonParse'"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行