Hive之UDF
阿新 • • 發佈:2018-11-01
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;