Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在配置单元查询中调用Java UDF时未返回预期结果_Java_Hadoop_Hive_Hql_Udf - Fatal编程技术网

在配置单元查询中调用Java 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

当我在配置单元内调用java UDF时,它返回的结果与IDE中返回的结果不一致(排序顺序与提供的字符串相同)。创建UDF是为了从字符串中删除重复项,并以相同的顺序返回输出,但使用小写

例如:

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库!