ビッグデータHiveフレームワーク-カスタム関数

2046 ワード

hiveのカスタム関数タイプ


UDF(User-defined function)


1対1:パラメータを渡し、値を返します.

UDAT (Aggregate Functions)


複数対1:複数のパラメータを渡し、1つのパラメータmaxを返す
通常groupby連用

UDTF(Table-Generating Functions )


1対の複数:1つの値が入力され、複数の値が返されます.複雑です.

カスタム関数の実装——UDF


コーディング要件


(1)UDFクラスに継承


(2)方法規定


a、Implement one or more methods named evaluate:evaluateメソッドを実装する必要がある
b、evaluate should never be a void method.:戻り値タイプは空にできません
c、メソッドのパラメータと戻り値のタイプ:JavaタイプまたはHadoopタイプ.
Hadoopタイプを推奨します.hiveでカスタム関数を実行する場合、データ型を変換する必要がありません.
高速化

具体的な実装:ケース、文字列の両端の二重引用符を除去

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

// UDF , evaluate 
public class MyIpToolsUDF extends UDF {
    public Text evaluate(Text text){
		// 
        String value = text.toString();
		// 
        if(StringUtils.isBlank(value)){
            return new Text("null");
        }
		// 
       return  new Text(value.replace("\"" ,"")+",");
    }
}

パッケージテスト


a)Jarバッグmvnパッケージ


b)JarパッケージをClassPathの下に追加する

 hive(db_hive)>add jar /opt/cdh5.7.6/hive-1.1.0-cdh5.7.6/hadoop-1.0-SNAPSHOT.jar

c)関数の作成

hive (db_hive)> CREATE FUNCTION removeQuato as 'com.my_hive_function.MyIpToolsUDF';

d)テスト

hive (db_hive)> select removeQuato(ip) AS ip
              > FROM access_log LIMIT 5 ;

e)カスタム関数の削除

hive (db_hive)> DROP FUNCTION removeQuato;