hive下UDF函數的使用


1、編寫函數

 

  1. package com.example.hive.udf;  
  2.   
  3. import org.apache.hadoop.hive.ql.exec.UDF;  
  4. import org.apache.hadoop.io.Text;  
  5.   
  6. public final class LowerCase extends UDF {  
  7.   public Text evaluate(final Text s) {  
  8.     if (s == null) { return null; }  
  9.     return new Text(s.toString().toLowerCase());  
  10.   }  
  11. }  
package com.example.hive.udf;

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

public final class LowerCase extends UDF {
  public Text evaluate(final Text s) {
    if (s == null) { return null; }
    return new Text(s.toString().toLowerCase());
  }
}

2、用eclipse下的fatjar插件進行打包

 

先下載net.sf.fjep.fatjar_0.0.31.jar插件包,cp至eclipse/plugins目錄下,重啟eclipse,右擊項目選Export,選擇用fatjar導出(可以刪掉沒用的包,不然導出的jar包很大)

3、將導出的hiveudf.jar復制到hdfs上

hadoop fs -copyFromLocal hiveudf.jar hiveudf.jar

4、進入hive,添加jar,

add jar hdfs://localhost:9000/user/root/hiveudf.jar

5、創建一個臨時函數

create temporary function my_lower as 'com.example.hive.udf.LowerCase';

6、調用

select LowerCase(name) from teacher;

注:這種方法只能添加臨時的函數,每次重新進入hive的時候都要再執行4-6,要使得這個函數永久生效,要將其注冊到hive的函數列表 

 

添加函數文件$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLowerCase.java

 

修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java文件
import org.apache.hadoop.hive.ql.udf.UDFLowerCase;

registerUDF(“LowerCase”, UDFLowerCase.class,false);

(上面這個方法未測試成功)

為了避免每次都有add jar 可以設置hive的'輔助jar路徑'

在hive-env.sh中 export HIVE_AUX_JARS_PATH=/home/ckl/workspace/mudf/mudf_fat.jar;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM