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 条评论
登录 后参与评论

相关文章

来自专栏wOw的Android小站

[Android][Framework] 无障碍快捷方式相关代码

问题:无障碍快捷方式(Accessibility Shortcut)打开不生效。

441
来自专栏小白安全

EMLOG更改后台地址导致微语表情不显示解决方法

解决办法: 在include/lib/function.base.php中找到一下代码 /** * 替换表情 * * @param $t */ ...

3586
来自专栏Java Edge

Spring Http源码

/* Copyright 2002-2017 the original author or authors. Licensed under the Apac...

3005
来自专栏白驹过隙

ACE - Reactor源码总结整理

32514
来自专栏菩提树下的杨过

tomcat 8.5.9.0 解决catalina.out过大的问题

先吐嘈一下tomcat这个项目,日志切割这么常见的功能,tomcat这种知名开源项目默认居然不开启,生产环境跑不了几天,磁盘就满了,而且很多网上流传的方法,比如...

2437
来自专栏算法+

mser 最大稳定极值区域(文字区域定位)算法 附完整C代码

mser 的全称:Maximally Stable Extremal Regions 第一次听说这个算法时,是来自当时部门的一个同事, 提及到他的项目用它来做文...

4746
来自专栏cs

通过john破解Windows密码

解压文件 dfzxk@satan-master:~$ cd /home/dfzxk/下载/ dfzxk@satan-master:~/下载$ ls -a . ...

2875
来自专栏后端之路

SpringMvc4的Zero Xml配置

背景 相信大部分做J2ee的项目的小伙伴都会在各种配置文件中饱受摧残。听说0配置估计都蛮感兴趣。 事实上xml的配置个人觉得对于项目结构比较清晰,纯粹的java...

2265
来自专栏后端之路

Excel 导出效率

参考Excel导出改善 小伙伴问起导出效率如何 简单写了个样例 <?xml version="1.0" encoding="UTF-8"?> <project ...

2537
来自专栏Netkiller

Hyperledger Fabric Chaincode 开发

中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

54811

扫码关注云+社区