这期内容当中小编将会给大家带来有关 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。