首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hadoop :降低输出records=0

hadoop :降低输出records=0
EN

Stack Overflow用户
提问于 2016-10-31 07:26:57
回答 1查看 773关注 0票数 1

我正在使用2个映射器类和一个reducer编写MapReduce代码,但是我不知道为什么我有一个reduce输出records=0。请告诉我如何解决这个问题

代码语言:javascript
复制
package reducesidejoin;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
import java.util.Iterator;

    public class ReduceSideJoinReducer extends Reducer<IntWritable,
            Text, IntWritable, Text> {
        @Override
        public void reduce(IntWritable key, Iterable<Text> values,
                           Context context) throws IOException, InterruptedException {
            String output = null;
            Text achat;
            Text vins;
            Text valeur2;
            Text valeur1;
            Iterator<Text> itr = values.iterator();
            valeur1 = itr.next();
            if (valeur1.charAt(0) == 1) {
                vins = valeur1;
                while (itr.hasNext()) {
                    valeur2 = itr.next();
                    if (valeur2.charAt(0) == 2) {
                        achat = valeur2;
                        output = vins.toString() + achat.toString();
                        context.write(key, new Text(output));
                    }
                    context.write(key, new Text(output));
                }
            } else if (valeur1.charAt(0) == 2) {
                achat = valeur1;
                while (itr.hasNext()) {
                    valeur2 = itr.next();
                    if (valeur2.charAt(0) == 1) {
                        vins = valeur2;
                        output = vins.toString() + achat.toString();
                        System.out.println(key + "," + output);
                    }
                    context.write(key, new Text(output));
                }
            }
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2016-10-31 17:54:57

你的缩减程序输出任何东西的唯一方法是你的字符比较是有效的。这是假设您实际上有记录进入您的缩减程序。

我会看看下面这几行:valeur1.charAt(0) == 1

您正在比较一个整数和一个字符,我怀疑您正在寻找1的可打印值(如果您进行了整数比较,则为49),因此您可能希望:

valeur1.charAt(0) == '1'

你也做了很多这样的事情- vins = valeur1;,这会导致问题,因为hadoop将重用它通过Iterable提供给你的Text对象。

您应该将它们更改为vins.set(valeur1);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40334753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档