Разбор двойного к DoubleWritable Hadoop MapReduce в Java - PullRequest
0 голосов
/ 19 декабря 2018

Привет, я новичок в Hadoop. Я застрял в той точке, где я понятия не имею, что я делаю неправильно.Я пытаюсь разобрать простое двойное значение в DoubleWritable из Hadoop, но это дает мне 0,0.

0.0 Southwest 
0.0 US Airways 
0.0 United 
0.0 Virgin America 

Ниже я пытаюсь сделать следующее:

double negativeWords = 0;
for(DoubleWritable value : values) {        
    if(value.get() < 0) {
        negativeWords = negativeWords + 1;
    }
}
logger.info("NEGATIVE WORDS: " +negativeWords + " KEY: " + key);
context.write(key, new DoubleWritable(negativeWords));

Класс Mapper

public class USAirlineComparisionMapper extends Mapper<LongWritable, Text, Text, DoubleWritable> {
    private Logger logger = Logger.getLogger(USAirlineComparisionMapper.class);
    private final static DoubleWritable tempResult = new DoubleWritable();
    private Text tempAirline = new Text();
    private Set<String> negativeSet;
    private Set<String> positiveSet;

    @Override
    protected void setup(Context context)
            throws IOException, InterruptedException {
        Configuration conf = context.getConfiguration();
        negativeSet = new HashSet<String>();
        positiveSet = new HashSet<String>();

        for(String negWord : conf.get("negativewords").split(",")) {
            negativeSet.add(negWord);
        }
        for(String posWord : conf.get("positivewords").split(",")) {
            positiveSet.add(posWord);
        }
    }



    @Override
    protected void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
        double positiveWords = 0;
        double negativeWords = 0;
        double otherWords = 0;
        double result = 0;

        try {
        String[] row = value.toString().split(",");
        String tweet = row[10];
        tempAirline.set(row[5]);

        String[] splitedTweet = tweet.split(" ");

        for(int i = 0; i < splitedTweet.length; i++) {      

            if(splitedTweet[i] != " ") {
                if(negativeSet.contains(splitedTweet[i].trim().replaceAll("[^a-zA-Z0-9]", ""))) {
                    negativeWords++;
                }else if(positiveSet.contains(splitedTweet[i].trim().replaceAll("[^a-zA-Z0-9]", ""))) {
                    positiveWords++;
                }else {
                    otherWords++;
                }
            }
        }

        try {
            result = (positiveWords - negativeWords)/(positiveWords + negativeWords + otherWords);

            logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$");
            logger.info("RESULT: " +result );
            logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$");

        }catch(ArithmeticException e) {
            result = 1;
        }

        tempResult.set(Math.round(result * 100.0) /100.0);
        /*logger.info("==============================================");
        logger.info("result : " + result);
        logger.info("==============================================");*/
        context.write(tempAirline, tempResult);

    }catch(Exception e) {
        logger.error(" ", e);
    }
    }
}

Самая интересная часть в моем журнале, я получаюжелаемый результат:

ОТРИЦАТЕЛЬНЫЕ СЛОВА: 345.0. КЛЮЧ: Дельта ОТРИЦАТЕЛЬНЫЕ СЛОВА: 293.0. КЛЮЧ: Юго-Запад. ОТРИЦАТЕЛЬНЫЕ СЛОВА: 19.0. КЛЮЧ: US Airways. ОТРИЦАТЕЛЬНЫЕ СЛОВА: 650.0.Америка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...