Java UDF在hive查询内部调用时未返回预期结果

时间:2016-08-30 11:25:43

标签: java hadoop hive hql udf

当我在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;
        }
    }

0 个答案:

没有答案