hadoop离线阶段(第十四节—3)hive函数及自定义函数

1300-黄同学

发表文章数:85

热门标签

首页 » 大数据 » 正文

hive函数

  1. 查看系统自带的函数
hive> show functions;
  1. 显示自带的函数的用法
hive> desc function upper;
  1. 详细显示自带的函数的用法
hive> desc function extended upper;

hive自定义函数

hive自定义函数概念

  1. Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。
  2. 当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
  3. 根据用户自定义函数类别分为以下三种:
    (1)UDF(User-Defined-Function)
    一进一出
    (2)UDAF(User-Defined Aggregation Function)
    聚集函数,多进一出
    类似于:count/max/min
    (3)UDTF(User-Defined Table-Generating Functions)
    一进多出
    如lateral view explore()
    一般情况下,自定义函数主要就是UDF(一进一出)函数

hive自定义函数示例

目的:写一个UDF函数,完成小写字母变成大写。

  1. 创建maven java 工程,导入jar包
    如下是maven工程的pom
<repositories>
    <repository>
        <id>cloudera</id>
 <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.6.0-cdh5.14.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>1.1.0-cdh5.14.0</version>
    </dependency>
</dependencies>
<build>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
     <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
         <version>2.2</version>
         <executions>
             <execution>
                 <phase>package</phase>
                 <goals>
                     <goal>shade</goal>
                 </goals>
                 <configuration>
                     <filters>
                         <filter>
                             <artifact>*:*</artifact>
                             <excludes>
                                 <exclude>META-INF/*.SF</exclude>
                                 <exclude>META-INF/*.DSA</exclude>
                                 <exclude>META-INF/*/RSA</exclude>
                             </excludes>
                         </filter>
                     </filters>
                 </configuration>
             </execution>
         </executions>
     </plugin>
</plugins>
</build>

需要注意的是,hive-exec的依赖不容易加载,实在加载不上就不要用maven工程了,直接在CDH版hadoop的jar包集合里面找对应版本的jar包,有了jar包创建java se项目即可。
2. 代码实现
写UDF类需要注意两点:
(1)方法一定要有返回值,且不能是void方法。
(2)必须写evaluate方法,这个方法可以理解为一般的主类的main方法。

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class MyUDF extends UDF
{
    public Text evaluate(Text inputData)
    {
        if (inputData != null && !inputData.toString().trim().equals(""))
            return new Text(inputData.toString().toUpperCase());
        else
            return new Text("");
    }
}
  1. 运行自写的UDF函数
    (1)将java项目打为jar包,并上传到hive的lib目录下。
    (2)添加含有自写的UDF函数的jar包(当前会话有效),hive> add jar /export/servers/hive-1.1.0-cdh5.14.0/lib/udf.jar;
    (3)给自定义函数起一个在hive中的函数名(当前会话有效),create temporary function 函数名 as 'UDF类的相对路径';
    (4)测试自定义函数,select 函数名('abc');
标签:

未经允许不得转载:作者:1300-黄同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《hadoop离线阶段(第十四节—3)hive函数及自定义函数》 发布于2020-12-09

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录