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

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

有一个udf java类,如下所示:

  1. import org.apache.commons.lang.StringUtils;
  2. import org.apache.hadoop.hive.ql.exec.UDF;
  3. import org.apache.hadoop.io.Text;
  4. public class Strip extends UDF {
  5. private Text result = new Text();
  6. public Text evaluate(Text str) {
  7. if (str == null) {
  8. return null;
  9. }
  10. result.set(StringUtils.strip(str.toString()));
  11. return result;
  12. }
  13. public Text evaluate(Text str, String stripChars) {
  14. if (str == null) {
  15. return null;
  16. }
  17. result.set(StringUtils.strip(str.toString(), stripChars));
  18. return result;
  19. }
  20. }

hive实际上支持UDF中的java原语(以及其他一些类型,如java.util.list和java.util.map),因此签名如下:

  1. public String evaluate(String str)

同样有效。但是,通过使用文本,我们可以利用对象重用,这可以带来效率节约,因此这通常是首选。有人能告诉我为什么喜欢文字吗?为什么我们可以通过使用文本来利用对象重用。在配置单元中执行以下命令时:

  1. hive> SELECT strip(' bee ') FROM dummy;

之后,我们使用strip函数执行另一个命令,然后再次创建strip对象,对吗?所以我们不能重复使用它,对吗?

afdcj2ne

afdcj2ne1#

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

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

相关问题