hive関数UDF
1777 ワード
1.サンプルコード
2.GetCmsIDとしてエクスポート.jar
3.運転
hive> add jar/usr/local/hivedemo/GetCmsID.jar;hive> create temporary function getCmsID as 'com.lixg.udf.GetCmsID';hive> select getCmsID(t.col1) from t limit 10;hive> drop temporary function getCmsID;備考:1.getCmsIDは一時的な関数であるため、hiveに入るたびにadd jarおよびcreate temporary操作が必要となる.UDFは一進一出の動作しか実現できないが、多進一出を実現する必要がある場合はUDAFを実現する必要がある
package com.lixg.udf;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.hadoop.hive.ql.exec.UDF;
public class GetCmsID extends UDF {
public String evaluate(String url){
String cmsid = null;
if (url==null || "".equals(url)) {
return cmsid;
}
Pattern pat = Pattern.compile("topicId=[0-9]+") ;
Matcher matcher = pat.matcher(url);
if (matcher.find()) {
cmsid=matcher.group().split("topicId=")[1];
}
return cmsid;
}
public String evaluate(String pattern,String url){
String cmsid = null;
if (url==null || "".equals(url)) {
return cmsid;
}
Pattern pat = Pattern.compile(pattern+"[0-9]+") ;
Matcher matcher = pat.matcher(url);
if (matcher.find()) {
cmsid=matcher.group().split(pattern)[1];
}
return cmsid;
}
public static void main(String[] args) {
String url="http://www.taobao.com/cms/view.do?topicId=18980";
GetCmsID getCmsID = new GetCmsID();
System.out.println(getCmsID.evaluate(url)) ;
System.out.println(getCmsID.evaluate("cmsid=",url)) ;
}
}
2.GetCmsIDとしてエクスポート.jar
3.運転
hive> add jar/usr/local/hivedemo/GetCmsID.jar;hive> create temporary function getCmsID as 'com.lixg.udf.GetCmsID';hive> select getCmsID(t.col1) from t limit 10;hive> drop temporary function getCmsID;備考:1.getCmsIDは一時的な関数であるため、hiveに入るたびにadd jarおよびcreate temporary操作が必要となる.UDFは一進一出の動作しか実現できないが、多進一出を実現する必要がある場合はUDAFを実現する必要がある