在配置单元查询中调用Java UDF时未返回预期结果
当我在配置单元内调用java UDF时,它返回的结果与IDE中返回的结果不一致(排序顺序与提供的字符串相同)。创建UDF是为了从字符串中删除重复项,并以相同的顺序返回输出,但使用小写 例如:在配置单元查询中调用Java UDF时未返回预期结果,java,hadoop,hive,hql,udf,Java,Hadoop,Hive,Hql,Udf,当我在配置单元内调用java UDF时,它返回的结果与IDE中返回的结果不一致(排序顺序与提供的字符串相同)。创建UDF是为了从字符串中删除重复项,并以相同的顺序返回输出,但使用小写 例如: Sony+sony+E2312+xperia+sony => sony+e2312+xperia 在IDE内执行时,它返回正确的值(如上所述),但从配置单元控制台调用时,它返回: e2312+sony+xperia 自定义项代码: package com.javaudf.hive; import
Sony+sony+E2312+xperia+sony => sony+e2312+xperia
在IDE内执行时,它返回正确的值(如上所述),但从配置单元控制台调用时,它返回:
e2312+sony+xperia
自定义项代码:
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;
}
}
package com.javaudf.hive;
导入java.util.LinkedHashSet;
导入java.util.Set;
导入org.apache.commons.lang3.StringUtils;
导入org.apache.hadoop.hive.ql.exec.UDF;
导入org.apache.hadoop.io.Text;
公共类processDeviceModel扩展了UDF{
私有文本结果=新文本();
专用字符串分隔符=“[-+\\s*.=|::]”;
公共文本评估(文本输入){
字符串dmModel=新字符串();
if(input==null | | input.getLength()==0)
返回null;
其他的
dmModel=input.toString().trim().toLowerCase();
String[]parts=dmModel.split(分隔符);
Set uniqueparts=new LinkedHashSet();
对于(int i=0;i
找到了问题!可能配置单元中缺少LinkedHashSet库!找到了问题!可能配置单元中缺少LinkedHashSet库!