hive UDF笔记

hive UDF笔记

1.编写代码

  1. package com.billstudy.udf;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.apache.hadoop.hive.ql.exec.UDF;
  5. import org.apache.hadoop.io.Text;
  6. /**
  7. * 自定义UDF函数
  8. * @author Bill
  9. * @since V1.0 2015年6月14日 - 下午10:33:00
  10. */
  11. public class NationUDF extends UDF{
  12. public static Map<String,String> nationMap = new HashMap<String,String>();
  13. static {
  14. nationMap.put("china", "中国");
  15. nationMap.put("japan", "日本");
  16. nationMap.put("usa", "美国");
  17. }
  18. private Text returnNation = new Text();
  19. /**
  20. * 名称必须是evaluate
  21. * @author Bill
  22. * @since V1.0 2015年6月14日 - 下午10:32:41
  23. * @param nationKey
  24. * @return
  25. */
  26. public Text evaluate(Text nationKey){
  27. String nation = nationMap.get(nationKey.toString());
  28. if (nation == null) {
  29. nation = "未知";
  30. }
  31. returnNation.set(nation);
  32. return returnNation;
  33. }
  34. }

2.加入jar
hive> add jar /home/hadoop/NationUDF.jar
3.创建函数
create tepmorary function nation as “com.billstudy.udf.NationUDF”
4.使用
默认情况
select * from person;
            
            使用函数
            select id,name,nation(nation) from person;
             
实验记录:
    在第一次,自己没有往nationMap填充默认值时,也就是hive里面查询会显示所有的nation都是未知的,这个时候将代码修改后重新上传到上次add jar的位置(/home/hadoop/NationUDF.jar),hive可以自动使用新的jar。不需要重新add jar 然后再创建函数。 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注