【发布时间】:2017-03-31 04:42:21
【问题描述】:
我正在尝试编写一个 Hive UDF,它检查 Hive 表中的列并将字符串与它连接起来。 我的 Hive 表 - cityTab 架构和数据:
Schema:
id int
name char(30)
rank int
Data:
1 NewYork 10
2 Amsterdam 30
我编写了以下 Hive UDF:
public class MyHiveUdf extends UDF {
private Text result = new Text();
public Text evaluate(Text text) {
if(text == null) {
return null;
} else {
String str = text.toString();
if(str.contains("NewYork")) {
result.set(text.toString().concat(" America"));
}
return result;
}
}
}
我添加了 jar,创建了一个临时函数并执行如下:
ADD jar /home/cloudera/Desktop/HiveStrCon.jar;
create temporary function strcon as 'com.hiveudf.strmnp.MyHiveUdf';
select strcon(name) from cityTab;
但我看到输出数据没有任何新字符串的串联:
OK
NewYork
Amsterdam
Time taken: 0.191 seconds, Fetched: 3 row(s)
谁能告诉我我在这里犯了什么错误。
【问题讨论】:
-
您的 UDF 必须在
if块内返回result。 -
@franklinsijo 抱歉。这是一个错字,我更正了。我仍然得到相同的结果。
-
当名称不是
NewYork时,您应该得到null。result仅在名称为NewYork时设置。在if中添加一个返回值,如果 str.contains 为 false,则返回text。