hive 的udf 函數使用
阿新 • • 發佈:2018-04-12
大數據 hadoop hive udf
- 1)依據課程講解UDF編程案例,完成練習,總結開發UDF步驟,代碼貼圖,給予註釋,重點
- 2)更改emp 表中名字的大寫給為小寫。
一:hive 的udf 函數:
1.1 hive UDF 函數概述:
1. hive自帶了一些函數比如:max/min 等,但是由於自帶的函數數量有限,自己可以定義udf來方便擴展。
2. udf 函數可以直接應用於select 語句,對查詢結構做格式化處理之後,然後再輸出內容。
1.2 hive 編寫udf函數的時候需要註意的地方:
1. 自定義udf函數需要繼承org.apache.hadoop.hive.ql.UDF 2. 需要實現evaluate 函數,evaluate 函數支持重載。 3. udf 必須要有返回類型,可以返回null,但是返回類型不能為void; 4. udf 常用Text/LongWrite 等類型,不推薦使用java類型。
1.3 hive 的udf 函數編寫:
1. 環境配置處理:
更改repository源
cd .m2/
mv repository repository.bak
上傳新的repository.tar.gz 包。
tar -zxvf repository.tar.gz
備份原有setting.xml 文件
cp -p setting.xml setting.xml.bak
cd /home/hadoop/yangyang/maven/conf
cp -p setting.xml setting.xml
1.4 更改maven源的配置:
在setting.xml 中<mirrors> ....</mirrors> 之間增加新的源倉庫: <mirror> <id>nexus-osc</id> <mirrorOf>central</mirrorOf> <name>Nexus osc</name> <url>http://maven.oschina.net/content/groups/public/</url> </mirror> 拷貝新的setting文件到maven 的配置文件中 cp -p .m2/setting.xml /home/hadoop/yangyang/maven/conf
1.5 更改eclipse的pom.xml 文件增加:
在原有的<dependencies>....</dependencies> 之間加上hive 的參數: <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>0.13.1</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>0.13.1</version> </dependency> </dependencies>
二: 更改emp 表中名字的大寫給為小寫。
2.1 新建UDF包 編寫lowerudf.java
package org.apache.hadoop.udf;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
/**
* New UDF classes need to inherit from this UDF class.
*/
public class LowerUDF extends UDF{
/**
* 1. Implement one or more methods named "evaluate" which will be called by Hive.
*
* 2. "evaluate" should never be a void method. However it can return "null" if needed.
*/
public Text evaluate(Text str){
// input parameter validate
if(null == str){
return null ;
}
// validate
if(StringUtils.isBlank(str.toString())){
return null ;
}
// lower
return new Text(str.toString().toLowerCase()) ;
}
public static void main(String[] args) {
System.out.println(new LowerUDF().evaluate(new Text()));
}
}
2.2 導出jar包 到/home/hadoop/yangyang/hive/jars 下面:
2.3 執行lowerudf包 增加jar包與hive的關聯:
add jar /home/hadoop/yangyang/hive/jars/lowerudf.jar
create temporary function my_lower as ‘org.apache.hadoop.udf.LowerUDF‘ ;
show functions;
2.3.1 銷毀臨時的udf 函數:
drop temporary function add_example;
<!--這裏指my_lower 函數-->
2.4 執行my_lower 函數:
select my_lower(ename) from emp;
hive 的udf 函數使用