Hive3详细教程(九)Hive3自定义UDF函数(IDEA Maven版)

因为Hive本身是Java开发的,所以我们可以使用Java定义函数供Hive SQL使用。
我们通过定义一个将输入字符串转换成反向输出的案例来探究UDF函数的自定义。
在idea中使用maven开发,项目结构如下:
Hive3详细教程(九)Hive3自定义UDF函数(IDEA Maven版)_第1张图片
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">
    <parent>
        <artifactId>bigdataartifactId>
        <groupId>com.alangroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>testHiveartifactId>

    <name>testHivename>
    
    <url>http://www.example.comurl>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
    properties>

    <dependencies>
        
        <dependency>
            <groupId>org.apache.hivegroupId>
            <artifactId>hive-execartifactId>
            <version>3.1.2version>
        dependency>


        
        <dependency>
            <groupId>org.apache.hadoopgroupId>
            <artifactId>hadoop-commonartifactId>
            <version>3.3.1version>
        dependency>

    dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-pluginartifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.alan.WordCountDrivermainClass>
                        manifest>
                    archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependenciesdescriptorRef>
                    descriptorRefs>
                configuration>
                <executions>
                    <execution>
                        <id>make-assemblyid> 
                        <phase>packagephase> 
                        <goals>
                            <goal>singlegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
project>

实现一个字符串的反转输出:

Java代码:

package com.alan;

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

@SuppressWarnings("deprecation")
public class RevertString extends UDF {
    public Text evaluate(Text line) {
        if (null != line && !line.toString().equals("")) {
            String str = line.toString();
            char[] rs = new char[str.length()];
            for (int i = str.length() - 1; i >= 0; i--) {
                rs[str.length() - 1 - i] = str.charAt(i);
            }
            line.set(new String(rs));
            return line;
        }
        line.set("");
        return line;
    }
}

打成包含依赖的jar包:
Hive3详细教程(九)Hive3自定义UDF函数(IDEA Maven版)_第2张图片

上传到linux虚拟机中
Hive3详细教程(九)Hive3自定义UDF函数(IDEA Maven版)_第3张图片

添加到hive中:

add jar /apps/testHive-v2.jar;

设置函数名,关联类名

create temporary function my_revert_v2 as 'com.alan.RevertString';

测试:

select my_revert_v2('abc');

Hive3详细教程(九)Hive3自定义UDF函数(IDEA Maven版)_第4张图片

你可能感兴趣的:(Hive3,hive,hadoop)