为什么在hiveudfjava类中文本优先于字符串

cu6pst1q  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(466)

有一个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对象,对吗?所以我们不能重复使用它,对吗?

afdcj2ne

afdcj2ne1#

可以通过对文本示例调用set()方法之一来重用该示例。例如:

Text t = new Text("hadoop");
t.set("pig");

相关问题