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. 如何用ajax下载文件

    引子 在HTML5没来之前,浏览器想要下载文件,可能有这么几种方式: 借助a标签,<a href="学习资料.xlsx"></a> window.locat ...

  2. centOS 6.5上安装mysql5.7压缩版

    mysql-5.7.10-linux-glibc2.5-i686.tar.gz是目前最新版,二进制发布包,适合各种32为版本的发型版Linux,由于只有一个包,解压后配配就行,很方便,比较符合我的风格 ...

  3. Google CodeJam 2016 round3-A.Teaching Assistant

    题目描述: 原题是纯英文,大意是:你每天可以选择一门课去学习,选题和提交答案.题目为Coding或者Jamming.选的题目如果和老师选的一致,提交答案也匹配,最后可以得10分,若选题不一致只能得5分 ...

  4. 一学期积累下来的SQL语句写法的学习

    整合了一下上学期学习的积累,希望可以帮到初学者! 可能以后会有用吧! A 基本语句的运用 操作基于emp表1.按工资从高到低排列SQL> select rownum as 次序,ename,sa ...

  5. redis源码学习-skiplist

    1.初步认识跳跃表 图中所示,跳跃表与普通链表的区别在于,每一个节点可以有多个后置节点,图中是一个4层的跳跃表 第0层: head->3->6->7->9->12-> ...

  6. 局域网的路由器&网卡

    网卡 唯一的标志 MAC地址:14:21:S8:8B:44:89 昵称:TP-Link-4489 如何获取局域网IP? DHCP(动态主机配置协议) DHCP 服务器可以动态的分配地址. 1)网卡(T ...

  7. redis学习(三)redis持久化

    redis持久化 1.redis持久化介绍 我们知道redis性能之所以强悍,是因为redis在运行时将数据都存放在了访问效率远高于硬盘的内存之中.可是这带来了新的问题:在redis或者外部系统重启时 ...

  8. postcss

    一.简介 PostCSS 本身是一个功能比较单一的工具.它提供了一种方式用 JavaScript 代码来处理 CSS.它负责把 CSS 代码解析成抽象语法树结构(Abstract Syntax Tre ...

  9. [Node.js] 3、搭建hexo博客

      一.安装新版本的nodejs和npm 安装n模块: npm install -g n 升级node.js到最新稳定版 n stable   二.安装hexo note: 参考github,不要去其 ...

  10. vector向量容器(常用的使用方法总结)

    关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...