您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關 hive擴展函數開發的實現方法,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
提供以下兩種實現方式:a繼承org.apache.hadoop.hive.ql.exec.UDF類
代碼包為:packageorg.apache.hadoop.hive.ql.udf
實現evaluate方法,根據輸入參數和返回參數類型,系統自動轉換到匹配的方法實現上。
例如:
? UDFTestLength.java:
importorg.apache.hadoop.io.IntWritable;
importorg.apache.hadoop.io.Text;
public classUDFTestLength extends UDF {
IntWritable result = new IntWritable();
public IntWritable evaluate(Text s) {
if (s== null) {
return null;
}
result.set(countUDF8Characters(s));
return result;
}
}
b繼承org.apache.hadoop.hive.ql.udf.generic.GenericUDF類
代碼包為:packageorg.apache.hadoop.hive.ql.udf. generic
實現initialize ,evaluate, getDisplayString方法
例如:
@Description(name = "url_to_map", value = "_FUNC_(text,delimiter1, delimiter2) - "
public class GenericUDFUrlToMap extends GenericUDF{
HashMap<Object,Object> ret = new HashMap<Object, Object>();
@Override
public ObjectInspector initialize(ObjectInspector[]arguments)
throwsUDFArgumentException {
… …
returnObjectInspectorFactory.getStandardMapObjectInspector(
PrimitiveObjectInspectorFactory.javaStringObjectInspector,
PrimitiveObjectInspectorFactory.javaStringObjectInspector);
}
@Override
public Object evaluate(DeferredObject[]arguments) throws HiveException {
ret.clear();
… …
return ret;
}
@Override
public String getDisplayString(String[]children) {
StringBuildersb = new StringBuilder();
sb.append("url_to_map(");
assert (children.length <= 3);
boolean firstChild = true;
for (String child :children) {
if (firstChild) {
firstChild= false;
}else {
sb.append(",");
}
sb.append(child);
}
sb.append(")");
return sb.toString();
}
}
上述就是小編為大家分享的 hive擴展函數開發的實現方法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。