Hadoop基础教程-第12章 Hive:进阶(12.2 自定义函数)(草稿)

第12章 Hive:进阶

12.2 自定义函数

12.2.1 UDP

使用Eclipse编写UDP函数,可以通过maven下载需要的jar包,pom.xml文件如下。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.hadron</groupId>
    <artifactId>hiveFun</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>hiveFun</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>jdk.tools</groupId>
            <artifactId>jdk.tools</artifactId>
            <version>1.8</version>
            <scope>system</scope>
            <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
        </dependency>
    </dependencies>
    <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://maven.aliyun.com/nexus/content/repositories/central</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>
</project>
package cn.hadron.hiveFun;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.DoubleWritable;

public class LevelUDF extends UDF{

     public Text evaluate(double sal){

         if(sal<1500){
             return new Text("穷人");
         }else if(sal<2000){
             return new Text("温饱");
         }else if(sal<3000){
             return new Text("低产");
         }else if(sal<6000){
             return new Text("中产");
         }else if(sal<8000){
             return new Text("高产");
         }else{
             return new Text("富人");
         }
     }
}

导出jar包

hive> add jar /root/hiveFun.jar;
Added [/root/hiveFun.jar] to class path
Added resources: [/root/hiveFun.jar]
hive> create temporary function level_sal as 'cn.hadron.hiveFun.LevelUDF';
OK
Time taken: 1.06 seconds
hive>
hive> select ename,level_sal(sal) from emp;
OK
CLARK   低产
KING    中产
MILLER  穷人
SMITH   穷人
JONES   低产
FORD    中产
ALLEN   温饱
WARD    穷人
MARTIN  穷人
BLAKE   低产
TURNER  温饱
JAMES   穷人
HADRON  高产
Time taken: 0.181 seconds, Fetched: 13 row(s)
hive> 

12.2.2 UDAF

UDAF是用户自定义聚合函数。 要实现UDAF,我们需要实现下面的类: org.apache.hadoop.hive.ql.udf.generic.AbstractGenericUDAFResolver org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator AbstractGenericUDAFResolver检查输入参数,并且指定使用哪个resolver。

GenericUDAFResolver类已经过时弃用了,现在是实现GenericUDAFResolver2接口

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

Oracle 12c ASM|专题配额组的配额真的管用吗?

原文链接 https://martincarstenbach.wordpress.com/2017/07/21/12-2-new-feature-the-fle...

3456
来自专栏数据和云

未完待续:关于DB Link和SCN,你还需要知道的是...

前情回顾: 更新通报:Oracle修正了关于DB Link补丁的公告 解决方案:Oracle的DB Link问题及升级路线详述 预警揭秘:11.2.0.4前版必...

3377
来自专栏Java 源码分析

Linux下安装Node.js

手动二进制包的安装方法 一般来说我们在Node的官网上是找不到Linux的Deb包,或者是Rpm包的,他针对Windows和mac都有二进制的安装包,但是Li...

7165
来自专栏linux驱动个人学习

高通spi 屏幕 -lk代码分析

2853
来自专栏SeanCheney的专栏

Scrapy-Redis分布式抓取麦田二手房租房信息与数据分析准备工作租房爬虫二手房分布式爬虫数据分析及可视化

试着通过抓取一家房产公司的全部信息,研究下北京的房价。文章最后用Pandas进行了分析,并给出了数据可视化。 ---- 准备工作 麦田房产二手房页面(http:...

5447
来自专栏linux驱动个人学习

alsa声卡分析alsa-utils调用过程(二)-tinymixer

继上一篇文章:http://www.cnblogs.com/linhaostudy/p/8515277.html 三、tinymixer调用分析:(tinymi...

3457
来自专栏Linux运维学习之路

来一波Linux中查看cpu、磁盘、内存、网络的命令

转载请注明出处。 如果想远程管理服务器就有远程管理卡,比如Dell idRAC,HP ILO,IBM IMM 查看硬件的温度/风扇转速,电脑有撸大师,服务器就有...

2248
来自专栏杨建荣的学习笔记

关于操作失误的数据修复(r2笔记48天)

在系统升级的过程中,准备了大量的脚本,分成几个窗口来分别执行。 在碰到问题的时候,一定要很细心和冷静,不经意的错误可以需要几倍,几十倍的努力来挽回。 准生产环境...

3325
来自专栏CreateAMind

条件GAN重大改进!cGANs with Projection Discriminator

https://github.com/pfnet-research/sngan_projection

1062
来自专栏杨建荣的学习笔记

ORACLE 11g导入9i dump的问题及解决

因为系统迁移,需要将一部分的9i的数据导入11g的库里, 目标库是11.2.0.3.0 64位的环境。 导入dump的时候,有一个比较大的分区表,需要用导入分...

3357

扫码关注云+社区