[关闭]
@zhangyy 2016-05-20T11:13:10.000000Z 字数 2175 阅读 185

hive 的udf 函数处理

大数据系列


  • 1)依据课程讲解UDF编程案例,完成练习,总结开发UDF步骤,代码贴图,给予注释,重点
  • 2)更改emp 表中名字的大写给为小写。

一:hive 的udf 函数:

hive 的udf 函数编写:

  1. 环境配置处理:
    更改repository源
  1. cd .m2/
  2. mv repository repository.bak
  3. 上传新的repository.tar.gz 包。
  4. tar -zxvf repository.tar.gz
  5. 备份原有setting.xml 文件
  6. cp -p setting.xml setting.xml.bak
  7. cd /home/hadoop/yangyang/maven/conf
  8. cp -p setting.xml setting.xml

更改maven源的配置:

  1. setting.xml 中<mirrors> ....</mirrors> 之间增加新的源仓库:
  2. <mirror>
  3. <id>nexus-osc</id>
  4. <mirrorOf>central</mirrorOf>
  5. <name>Nexus osc</name>
  6. <url>http://maven.oschina.net/content/groups/public/</url>
  7. </mirror>
  8. 拷贝新的setting文件到maven 的配置文件中
  9. cp -p .m2/setting.xml /home/hadoop/yangyang/maven/conf

更改eclipse的pom.xml 文件增加:

  1. 在原有的<dependencies>....</dependencies> 之间加上hive 的参数:
  2. <dependency>
  3. <groupId>org.apache.hive</groupId>
  4. <artifactId>hive-jdbc</artifactId>
  5. <version>0.13.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.hive</groupId>
  9. <artifactId>hive-exec</artifactId>
  10. <version>0.13.1</version>
  11. </dependency>
  12. </dependencies>

二: 更改emp 表中名字的大写给为小写。

新建UDF包:
编写lowerudf.java

  1. package org.apache.hadoop.udf;
  2. import org.apache.commons.lang.StringUtils;
  3. import org.apache.hadoop.hive.ql.exec.UDF;
  4. import org.apache.hadoop.io.Text;
  5. /**
  6. * New UDF classes need to inherit from this UDF class.
  7. */
  8. public class LowerUDF extends UDF{
  9. /**
  10. * 1. Implement one or more methods named "evaluate" which will be called by Hive.
  11. *
  12. * 2. "evaluate" should never be a void method. However it can return "null" if needed.
  13. */
  14. public Text evaluate(Text str){
  15. // input parameter validate
  16. if(null == str){
  17. return null ;
  18. }
  19. // validate
  20. if(StringUtils.isBlank(str.toString())){
  21. return null ;
  22. }
  23. // lower
  24. return new Text(str.toString().toLowerCase()) ;
  25. }
  26. public static void main(String[] args) {
  27. System.out.println(new LowerUDF().evaluate(new Text()));
  28. }
  29. }

导出jar包 到/home/hadoop/yangyang/hive/jars 下面:
image_1aj5vd9tq11dv5bm18c0qn6hdf9.png-132kB

image_1aj5veenk7ia10u21cdg1p2clvnm.png-116.3kB

image_1aj602rhi1qnq1lblfao1r7n1crg2n.png-89.9kB
image_1aj604gcm2cflnp1fgcjs3c4j3h.png-70.9kB
image_1aj5vp38k1j6a16hpma31lpn1okt1t.png-108.1kB

image_1aj601np3fbu1u8812671ejj1d8a2a.png-7.8kB

执行lowerudf 包:
增加jar包与hive的关联:

  1. add jar /home/hadoop/yangyang/hive/jars/lowerudf.jar
  2. create temporary function my_lower as 'org.apache.hadoop.udf.LowerUDF' ;
  3. show functions;

image_1aj6142qfish17jbq641hud1783u.png-19kB
image_1aj615ltq1oc8skf14bt5t8ghn4b.png-4.1kB
image_1aj61709b1c017d01glgebb8sa4o.png-17.1kB

销毁临时的udf 函数:

  1. drop temporary function add_example;
  2. <!--这里指my_lower 函数-->

执行my_lower 函数:

  1. select my_lower(ename) from emp;

image_1aj61ljuq1gih3fpj3k15dg11l855.png-27.8kB
image_1aj61meql1kpm1c3r1c7kduj1nqp5i.png-21.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注