1. 程式人生 > >Hive之UDF

Hive之UDF

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>com.sid.hive.udf</groupId> <artifactId>hiveudf</artifactId> <version>1.0</version> <properties> <hadoop.version>2.9.0</hadoop.version> <hive.version>2.3.3</hive.version> </properties> <
dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>
org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>${hive.version}</version> </dependency> </dependencies> </project>
package com.zoujc.myhive;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

/**
 * hive自定義函式
 * 1.繼承 UDF 類
 * 2.重寫evaluate方法
 */
public final class HiveUdfTest extends UDF {

   // 這裡接收引數的型別必須是hadoop能支援的輸入輸出型別
   public Text evaluate(final Text str){
      if(str == null){
         return null;
      }
      return new Text(str.toString().toLowerCase());
   }
}

打包
在這裡插入圖片描述


把生成的jar包上傳到hive所在的伺服器

把jar包新增到hive中
hive
在這裡插入圖片描述
往伺服器新增jar包

在這裡插入圖片描述

檢視匯入的jar包

在這裡插入圖片描述

建立臨時函式,只在當前會話有效
在這裡插入圖片描述
使用結果
在這裡插入圖片描述
建立永久的自定義函式

將jar包放到hdfs上,不可以放到OS上。

建立的是在sid庫下面的自定義函式
create function sid.test_udf_lower as com.zoujc.myhive.HiveUdfTest
using jar ‘hdfs:///root/opt/hiveudf-1.0.jar’;
use sid;
select student_id,test_udf_lower(name),age from student;