1、编写udf类
  1. package hive.udf;
  2. import org.apache.hadoop.hive.ql.exec.Description;
  3. import org.apache.hadoop.hive.ql.exec.UDF;
  4. /**
  5. * UDF的说明文档
  6. * name是UDF的名称
  7. * value是desc function xx输出的内容
  8. * extended是desc function extended xx输出的内容
  9. *
  10. */
  11. @Description(name="uppernum",
  12. value="_FUNC_ the input is a num, the output is the UpperNum",
  13. extended="Example:\n" +
  14. "> select uppernum(1) from src \n")
  15. public class UpperNumUDF extends UDF {
  16. /**
  17. * UDF类需要自定义evaluate方法,可以重载多个
  18. *
  19. * evaluate的参数、返回值必须是hive可以序列化的类型
  20. *
  21. * 参数:
  22. * 1)可以是java基本类型、String
  23. * 2)可以是Text
  24. * 3)可以包含多个参数,参数类型也可以不同
  25. * 4)可以是List<?>。如果hive表字段是Array<?>类型的,则是List
  26. *
  27. * 返回值:
  28. * 1)必须有返回值,可以为null
  29. * 2)返回值只能是java基本类型、String、Writable
  30. *
  31. * 可以自定义 UDFMethodResolver来手动匹配方法的执行
  32. *
  33. * @param num
  34. * @return
  35. */
  36. public String evaluate(int num) {
  37. String str = "ERROR";
  38. switch (num) {
  39. case 0:
  40. str = "零";
  41. break;
  42. case 1:
  43. str = "壹";
  44. break;
  45. case 2:
  46. str = "贰";
  47. break;
  48. case 3:
  49. str = "叁";
  50. break;
  51. case 4:
  52. str = "肆";
  53. break;
  54. case 5:
  55. str = "伍";
  56. break;
  57. default:
  58. break;
  59. }
  60. return str;
  61. }
  62. public String evaluate(String num) {
  63. int intnum = 100;
  64. try {
  65. intnum = Integer.parseInt(num);
  66. } catch (NumberFormatException e) {
  67. }
  68. return evaluate(intnum);
  69. }
  70. }

2、打包类,将jar上传到hive所在机器上

3、启动hive,在hive会话里执行:
1)加载jar包
  1. hive (test)> add jar ${env:HOME}/udf.jar;
ps:jar包路径没有引号

2)创建uppernum 
  1. hive (test)> create [temporary] function uppernum as 'hive.udf.UpperNumUDF';
ps:创建的function,在hive会话结束后将消失,可以在.hiverc里设置,来确保每次hive启动时都执行create。

3)使用uppernum 
  1. hive (test)> select uppernum(2) from dual;
  2. OK
  3. Time taken: 0.118 seconds, Fetched: 1 row(s)
  4. hive (test)> select uppernum(5) from dual;
  5. OK

4)查看uppernum的说明文档
  1. hive (test)> desc function uppernum;
  2. OK
  3. uppernum the input is a num, the output is the UpperNum
  4. Time taken: 0.138 seconds, Fetched: 1 row(s)
  5. hive (test)> desc function extended uppernum;
  6. OK
  7. uppernum the input is a num, the output is the UpperNum
  8. Example:
  9. > select uppernum(1) from src
  10. Time taken: 0.138 seconds, Fetched: 4 row(s)

5)删除UDF
  1. hive> drop [temporary] function uppernum;
  2. OK
  3. Time taken: 0.221 seconds



附件列表

自定义UDF的更多相关文章

  1. Hive UDF IP解析(二):使用geoip2数据库自定义UDF

    开发中经常会碰到将IP转为地域的问题,所以以下记录Hive中自定义UDF来解析IP. 使用到的地域库位maxmind公司的geoIP2数据库,分为免费版GeoLite2-City.mmdb和收费版Ge ...

  2. 自定义udf添加一列

    //创建得分窗口字典 var dict= new mutable.HashMap[Double, Int]() ){ dict.put(result_Score(i),i) } //自定义Udf函数 ...

  3. 2.13 Hive中自带Function使用及自定义UDF编程

    UDF:User Definition Function 一.function #查看自带的函数 hive (db_hive)> show functions; #查看一个函数的详细用法 hiv ...

  4. 自定义UDF函数应用异常

    自定义UDF函数应用异常 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 ...

  5. 如何给Apache Pig自定义UDF函数?

    近日由于工作所需,需要使用到Pig来分析线上的搜索日志数据,散仙本打算使用hive来分析的,但由于种种原因,没有用成,而Pig(pig0.12-cdh)散仙一直没有接触过,所以只能临阵磨枪了,花了两天 ...

  6. Hive 自定义UDF操作步骤

    Hive 自定义UDF操作步骤 需要自定义类,然后继承UDF 然后在方法envluate()方法里面实现具体的业务逻辑,打包上传到linux(以免出错打包成RunningJar) 一.创建临时函数 ( ...

  7. 【Spark篇】---SparkSQL中自定义UDF和UDAF,开窗函数的应用

    一.前述 SparkSQL中的UDF相当于是1进1出,UDAF相当于是多进一出,类似于聚合函数. 开窗函数一般分组取topn时常用. 二.UDF和UDAF函数 1.UDF函数 java代码: Spar ...

  8. 047 SparkSQL自定义UDF函数

    一:程序部分 1.需求 Double数据类型格式化,可以给定小数点位数 2.程序 package com.scala.it import org.apache.spark.{SparkConf, Sp ...

  9. Spark(十三)【SparkSQL自定义UDF/UDAF函数】

    目录 一.UDF(一进一出) 二.UDAF(多近一出) spark2.X 实现方式 案例 ①继承UserDefinedAggregateFunction,实现其中的方法 ②创建函数对象,注册函数,在s ...

随机推荐

  1. 基于GTK+3 开发远程控制管理软件(C语言实现)系列 一 开篇

    近期趁公司没项目来,想学习一下C和GTK+3 ,顺道再学习一下Linux下有关网络编程方面的知识. 一.学习知识: 1.C基本语法 2.GTK+3 API学习 GUI相关知识学习 3.Glade使用及 ...

  2. Scala的Trait详解

    http://article.yeeyan.org/view/178378/358355

  3. Thrift 基础(C++ rpc )

    一.thrift简介 thrift是Facebook开源的一套rpc框架,目前被许多公司使用 我理解的特点 使用IDL语言生成多语言的实现代码,程序员只需要实现自己的业务逻辑 支持序列化和反序列化操作 ...

  4. 【从0到1学Web前端】CSS定位问题二(float和display的使用) 分类: HTML+CSS 2015-05-28 22:03 812人阅读 评论(1) 收藏

    display 属性规定元素应该生成的框的类型. 这个属性用于定义建立布局时元素生成的显示框类型.对于 HTML 等文档类型,如果使用 display 不谨慎会很危险,因为可能违反 HTML 中已经定 ...

  5. Your Mac is infected with (3) Viruses!

    记一次流氓程序的清理 某天我的电脑不幸感染了这么一个病毒

  6. Apache版本的Hadoop HA集群启动详细步骤【包括Zookeeper、HDFS HA、YARN HA、HBase HA】(图文详解)

    不多说,直接上干货! 1.先每台机器的zookeeper启动(bigdata-pro01.kfk.com.bigdata-pro02.kfk.com.bigdata-pro03.kfk.com) 2. ...

  7. 18-hadoop-weather案例

    weather案例, 简单分析每年的前三个月的最高温即可, 使用自定义的分组和排序 设计分析 设定多个reduce 每年的数据都很多,如果按照默认情况处理,统计性能是非常慢(因为默认只有一个reduc ...

  8. springboot+cloud 学习(一)高可用服务注册中心(Eureka)

    先说说Eureka Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringClo ...

  9. GCD之Group

    1.问题的提出 在上面的GCD之全局.主线程中介绍了dispatch_get_global_queue.dispatch_get_main_queue的用法,可以看到最后执行的时间在10s 左右,在上 ...

  10. Java中异常发生时代码执行流程

    异常与错误: 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员) ...