当我在hive中调用java UDF时,它返回的结果与IDE中返回的结果不一致(按照与提供的字符串相同的顺序排序)。创建UDF是为了从字符串中删除重复项,并以相同的顺序返回输出,但是以小写形式返回。
例如:
Sony+sony+E2312+xperia+sony => sony+e2312+xperia
在IDE内部执行时,它返回正确的值(如上所示),但是当从Hive控制台调用时,它返回:
e2312+sony+xperia
UDF代码:
package com.javaudf.hive;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class processDeviceModel extends UDF {
private Text result = new Text();
private String delimiters = "[-+\\s*_=|;:]";
public Text evaluate(Text input) {
String dmModel = new String();
if (input == null || input.getLength() == 0)
return null;
else
dmModel = input.toString().trim().toLowerCase();
String[] parts = dmModel.split(delimiters);
Set<String> uniqueparts = new LinkedHashSet<String>();
for(int i = 0; i < parts.length; i++){
uniqueparts.add(parts[i]);
}
String str = StringUtils.join(uniqueparts, '+');
result.set(str);
return result;
}
}