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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Hadoop 从mapper输出-Mapreduce中获取前N项_Hadoop_Mapreduce_Bigdata - Fatal编程技术网

Hadoop 从mapper输出-Mapreduce中获取前N项

Hadoop 从mapper输出-Mapreduce中获取前N项,hadoop,mapreduce,bigdata,Hadoop,Mapreduce,Bigdata,My Mapper任务返回以下输出: 2 c 2 g 3 a 3 b 6 r 我已经编写了reducer代码和keycomparator,可以生成正确的输出,但如何获得映射器输出的前3名(按计数前N名): public static class WLReducer2 extends Reducer<IntWritable, Text, Text, IntWritable> { @Override protected void r

My Mapper任务返回以下输出:

2   c
2   g
3   a
3   b
6   r
我已经编写了reducer代码和keycomparator,可以生成正确的输出,但如何获得映射器输出的前3名(按计数前N名):

public static class WLReducer2 extends
        Reducer<IntWritable, Text, Text, IntWritable> {

    @Override
    protected void reduce(IntWritable key, Iterable<Text> values,
            Context context) throws IOException, InterruptedException {

        for (Text x : values) {
            context.write(new Text(x), key);
        }

    };

}

public static class KeyComparator extends WritableComparator {
    protected KeyComparator() {
        super(IntWritable.class, true);
    }

    @Override
    public int compare(WritableComparable w1, WritableComparable w2) {
        // TODO Auto-generated method stub

        // Logger.error("--------------------------> writing Keycompare data = ----------->");
        IntWritable ip1 = (IntWritable) w1;
        IntWritable ip2 = (IntWritable) w2;
        int cmp = -1 * ip1.compareTo(ip2);

        return cmp;
    }
}
按计数,减速器的预期输出为前3位,即:

r   6
b   3
a   3

限制减速器的输出。像这样的

public static class WLReducer2 extends
        Reducer<IntWritable, Text, Text, IntWritable> {
    int count=0;
    @Override
    protected void reduce(IntWritable key, Iterable<Text> values,
            Context context) throws IOException, InterruptedException {

        for (Text x : values) {
            if (count > 3)
            context.write(new Text(x), key);
            count++;
        }

    };
}
公共静态类WLReducer2扩展
减速器{
整数计数=0;
@凌驾
受保护的void reduce(可写密钥、可写值、,
上下文)抛出IOException、InterruptedException{
用于(文本x:值){
如果(计数>3)
编写(新文本(x),键);
计数++;
}
};
}

将减速器的数量设置为1<代码>作业。setNumReduceTasks(1)

限制减速器的输出。像这样的

public static class WLReducer2 extends
        Reducer<IntWritable, Text, Text, IntWritable> {
    int count=0;
    @Override
    protected void reduce(IntWritable key, Iterable<Text> values,
            Context context) throws IOException, InterruptedException {

        for (Text x : values) {
            if (count > 3)
            context.write(new Text(x), key);
            count++;
        }

    };
}
公共静态类WLReducer2扩展
减速器{
整数计数=0;
@凌驾
受保护的void reduce(可写密钥、可写值、,
上下文)抛出IOException、InterruptedException{
用于(文本x:值){
如果(计数>3)
编写(新文本(x),键);
计数++;
}
};
}

将减速器的数量设置为1<代码>作业。setNumReduceTasks(1)

限制减速器的输出。像这样的

public static class WLReducer2 extends
        Reducer<IntWritable, Text, Text, IntWritable> {
    int count=0;
    @Override
    protected void reduce(IntWritable key, Iterable<Text> values,
            Context context) throws IOException, InterruptedException {

        for (Text x : values) {
            if (count > 3)
            context.write(new Text(x), key);
            count++;
        }

    };
}
公共静态类WLReducer2扩展
减速器{
整数计数=0;
@凌驾
受保护的void reduce(可写密钥、可写值、,
上下文)抛出IOException、InterruptedException{
用于(文本x:值){
如果(计数>3)
编写(新文本(x),键);
计数++;
}
};
}

将减速器的数量设置为1<代码>作业。setNumReduceTasks(1)

限制减速器的输出。像这样的

public static class WLReducer2 extends
        Reducer<IntWritable, Text, Text, IntWritable> {
    int count=0;
    @Override
    protected void reduce(IntWritable key, Iterable<Text> values,
            Context context) throws IOException, InterruptedException {

        for (Text x : values) {
            if (count > 3)
            context.write(new Text(x), key);
            count++;
        }

    };
}
公共静态类WLReducer2扩展
减速器{
整数计数=0;
@凌驾
受保护的void reduce(可写密钥、可写值、,
上下文)抛出IOException、InterruptedException{
用于(文本x:值){
如果(计数>3)
编写(新文本(x),键);
计数++;
}
};
}

将减速器的数量设置为1
job.setNumReduceTasks(1)

如果您的前N个元素可以存储在内存中,那么您可以使用树映射来存储前N个元素,并且如果您的进程可以仅使用一个reducer进行聚合

  • 在reducer的setup()方法中实例化实例变量TreeMap
  • 在您的reducer()方法中,您应该聚合键组的所有值,然后将结果与树中的第一个(最低)键进行比较,
    map.firstKey()
    。如果当前值大于树中的最低值,则将当前值插入树映射中,
    map.put(value,Item)
    ,然后从树中删除最低值
    map.remove(value)
  • 在reducer的cleanup()方法中,按所需顺序将所有树映射元素写入输出

  • 注意:用于比较记录的值必须是树状图中的键。树映射的值应该是描述、标记、字母等;与数字相关

    如果您的前N个元素可以存储在内存中,您可以使用树形图来存储前N个元素,并且如果您的进程可以仅使用一个缩减器进行聚合

  • 在reducer的setup()方法中实例化实例变量TreeMap
  • 在您的reducer()方法中,您应该聚合键组的所有值,然后将结果与树中的第一个(最低)键进行比较,
    map.firstKey()
    。如果当前值大于树中的最低值,则将当前值插入树映射中,
    map.put(value,Item)
    ,然后从树中删除最低值
    map.remove(value)
  • 在reducer的cleanup()方法中,按所需顺序将所有树映射元素写入输出

  • 注意:用于比较记录的值必须是树状图中的键。树映射的值应该是描述、标记、字母等;与数字相关

    如果您的前N个元素可以存储在内存中,您可以使用树形图来存储前N个元素,并且如果您的进程可以仅使用一个缩减器进行聚合

  • 在reducer的setup()方法中实例化实例变量TreeMap
  • 在您的reducer()方法中,您应该聚合键组的所有值,然后将结果与树中的第一个(最低)键进行比较,
    map.firstKey()
    。如果当前值大于树中的最低值,则将当前值插入树映射中,
    map.put(value,Item)
    ,然后从树中删除最低值
    map.remove(value)
  • 在reducer的cleanup()方法中,按所需顺序将所有树映射元素写入输出

  • 注意:用于比较记录的值必须是树状图中的键。树映射的值应该是描述、标记、字母等;与数字相关

    如果您的前N个元素可以存储在内存中,您可以使用树形图来存储前N个元素,并且如果您的进程可以仅使用一个缩减器进行聚合

  • 设置()中实例化实例变量TreeMap