有一个udf java类,如下所示:
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class Strip extends UDF {
private Text result = new Text();
public Text evaluate(Text str) {
if (str == null) {
return null;
}
result.set(StringUtils.strip(str.toString()));
return result;
}
public Text evaluate(Text str, String stripChars) {
if (str == null) {
return null;
}
result.set(StringUtils.strip(str.toString(), stripChars));
return result;
}
}
hive实际上支持UDF中的java原语(以及其他一些类型,如java.util.list和java.util.map),因此签名如下:
public String evaluate(String str)
同样有效。但是,通过使用文本,我们可以利用对象重用,这可以带来效率节约,因此这通常是首选。有人能告诉我为什么喜欢文字吗?为什么我们可以通过使用文本来利用对象重用。在配置单元中执行以下命令时:
hive> SELECT strip(' bee ') FROM dummy;
之后,我们使用strip函数执行另一个命令,然后再次创建strip对象,对吗?所以我们不能重复使用它,对吗?
1条答案
按热度按时间afdcj2ne1#
可以通过对文本示例调用set()方法之一来重用该示例。例如: