ビッグデータ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;
コーディング要件
(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;