1. 程式人生 > 其它 >hive的udf函式

hive的udf函式

首先是要引入依賴

 <dependencies>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.4</version> </dependency> </dependencies>

在maven的conf/settings設定源:阿里雲的是一直在用的,我是直接加了進去,可以直接用。

    <mirrors>
        <mirror>
            <id>mirror</id>
            <mirrorOf>!rdc-releases,!rdc-snapshots</mirrorOf>
            <name>mirror</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </mirror>
      <mirror>
        <id>nexus-osc</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus osc</name>
        <url>http://
maven.oschina.net/content/groups/public/</url> </mirror> </mirrors>

一定要繼承UDF介面,重寫evaluate方法,名字一定是evaluate;

public class HelloUDF extends UDF {
    public Text evaluate( Text s) {
        if (s == null) { return null; }

        StringBuilder ret = new StringBuilder();

        String[] items = s.toString().split("\\.");
        if (items.length != 4){
            return null;
        }

        for (String item : items) {
            StringBuilder sb = new StringBuilder();
            int a = Integer.parseInt(item);
            for (int i=0; i<8; i++) {
                sb.insert(0, a%2);
                a = a/2;
            }
            ret.append(sb);
        }

        return new Text(ret.toString());
    }

maven打包,clean,complie,package;

複製路徑,選擇類,點選copyprefence;

進入hive,把jar包上傳到一個路徑,在hive裡新增jar包:

add jar /路徑/xxx.jar

list jar;展示新增的jar包,

show functions,展示列表的函式;

建立臨時函式
語法:CREATE TEMPORARY FUNCTION function_name AS class_name;
function_name函式名
class_name 類路徑,包名+類名(複製的路徑,就是copy prefence)

 hive> create temporary function ipcastas 'HelloUDF';
            OK
            Time taken: 0.087 seconds
            hive> 

刪除臨時函式
語法:DROP TEMPORARY FUNCTION [IF EXISTS] function_name;

 
            hive> DROP TEMPORARY FUNCTION IF EXISTS ipcast;
            OK
            Time taken: 0.015 seconds
            hive>