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
Hadoop 如何";排序“;从最常用的30个词开始下降?_Hadoop - Fatal编程技术网

Hadoop 如何";排序“;从最常用的30个词开始下降?

Hadoop 如何";排序“;从最常用的30个词开始下降?,hadoop,Hadoop,我的映射器(Hadoop 1.2.1)创建令牌的键值对,我从一个简单的文本文件中读取。没有火箭科学。最后,reducer“bundle”(在Hadoop中,您是否像在SQL中那样调用该分组?)使用相同的键,并对值1求和。这是默认的Hadoop教程 但是,当这些值对我的reducer可用时,我想对它们进行降序排序。仅显示前30个标记(字符串、单词) 似乎有些概念我不太清楚 首先,对每个键值对调用reduce方法,对吗?因此,我看不到一个地方可以缓冲像HashMap这样的东西,它可以保存顶级结果(

我的映射器(Hadoop 1.2.1)创建令牌的键值对,我从一个简单的文本文件中读取。没有火箭科学。最后,reducer“bundle”(在Hadoop中,您是否像在SQL中那样调用该分组?)使用相同的键,并对值1求和。这是默认的Hadoop教程

但是,当这些值对我的reducer可用时,我想对它们进行降序排序。仅显示前30个标记(字符串、单词)

似乎有些概念我不太清楚

  • 首先,对每个键值对调用
    reduce
    方法,对吗?因此,我看不到一个地方可以缓冲像HashMap这样的东西,它可以保存顶级结果(最常见的标记)
  • 我在想,如果我有这样一个变量,我可以很容易地比较和插入每一个值在前30位的键。处理频率排序任务的适当方法是什么

    public static class Reduce extends MapReduceBase implements
                Reducer<Text, IntWritable, Text, IntWritable> {
    
    public void reduce(Text key, Iterator<IntWritable> values,
            OutputCollector<Text, IntWritable> output, Reporter reporter)
            throws IOException {
    
        int sum = 0;
        while (values.hasNext()) {
            sum += values.next().get();
        }
                // CURRENTLY I SIMPLY OUTPUT THE KEY AND THE SUM.
                // IN THIS PLACE, HOW COULD YOU STORE E.G. A HASHMAP THAT
                // COULD STORE THE TOP 30?
        output.collect(key, new IntWritable(sum));
        LOG.info("REDUCE: added to output:: key: " + key.toString());
    }
    
    公共静态类Reduce扩展了MapReduceBase实现
    减速器{
    public void reduce(文本键、迭代器值、,
    OutputCollector输出,报告器(报告器)
    抛出IOException{
    整数和=0;
    while(values.hasNext()){
    sum+=values.next().get();
    }
    //目前,我只输出键和和。
    //在这个地方,您如何存储例如
    //能储存前30名吗?
    collect(key,newintwriteable(sum));
    LOG.info(“REDUCE:添加到输出::key:+key.toString());
    }
    
    }

首先,对每个键值对调用reduce方法,对吗? 因此,我看不到一个可以缓冲HashMap之类的东西的地方,这 可以保存最重要的结果(最常见的标记)

有点细微差别:
reduce
方法对每个键运行一次,而不是键值对。带有该键的每个值都显示在
迭代器中。如果要存储
哈希映射
,可以在
设置
函数中进行设置(或将其设置为私有对象),在reduce函数中与其交互,然后在
清理
函数中对其执行任何操作。因此,在对
reduce
的调用中保持状态是完全可能的

不过,我认为你也许可以用更聪明的方式解决你的问题。我已经写了很多次关于前十名的列表,只是因为我觉得它们很有趣,而且它们是非常有用的工具。我希望前30名与前10名之间的关系显而易见

  • 我不久前写过一篇文章,可以适应你的问题。 你可以稍微改变一下你解决问题的方式来适应这种模式。在我的代码中,我使用
    TreeMap
    而不是
    HashMap
    ,因为
    TreeMap
    将事物按顺序排列。一旦你有31个项目,弹出频率最低的一个

  • 我还讨论了《MapReduce设计模式》一书中的前十种模式(很抱歉使用无耻的插件)

  • 我几个月前就知道了

首先,对每个键值对调用reduce方法,对吗? 因此,我看不到一个可以缓冲HashMap之类的东西的地方,这 可以保存最重要的结果(最常见的标记)

有点细微差别:
reduce
方法对每个键运行一次,而不是键值对。带有该键的每个值都显示在
迭代器中。如果要存储
哈希映射
,可以在
设置
函数中进行设置(或将其设置为私有对象),在reduce函数中与其交互,然后在
清理
函数中对其执行任何操作。因此,在对
reduce
的调用中保持状态是完全可能的

不过,我认为你也许可以用更聪明的方式解决你的问题。我已经写了很多次关于前十名的列表,只是因为我觉得它们很有趣,而且它们是非常有用的工具。我希望前30名与前10名之间的关系显而易见

  • 我不久前写过一篇文章,可以适应你的问题。 你可以稍微改变一下你解决问题的方式来适应这种模式。在我的代码中,我使用
    TreeMap
    而不是
    HashMap
    ,因为
    TreeMap
    将事物按顺序排列。一旦你有31个项目,弹出频率最低的一个

  • 我还讨论了《MapReduce设计模式》一书中的前十种模式(很抱歉使用无耻的插件)

  • 我几个月前就知道了


这是一个坚实的开端!树形图有意义!谢谢你,唐纳德。绝对公平地指导书籍和文学(即使它是你的)。Hadoop 1.2.1中的
cleanup
方法等效于什么?从中扩展mapper和reducer类的MapReduceBase类不是该方法的宿主。只有
配置
关闭
@feder啊!可耻!我不知道你正在使用旧的API。请注意,您的导入内容是
.mapred.
而不是
.mapreduce.
。。。我认为它没有类似的方法。也许你应该考虑转换。对不起:\我刚买了你的书:)这确实照亮了一些黑暗点。这是一个坚实的开始!树形图有意义!谢谢你,唐纳德。绝对公平地指导书籍和文学(即使它是你的)。Hadoop 1.2.1中的
cleanup
方法等效于什么?从中扩展mapper和reducer类的MapReduceBase类不是该方法的宿主。只有
配置
关闭
@feder啊!可耻!我不知道你正在使用旧的API。请注意,您的导入内容是
.mapred.
而不是
.mapreduce.
。。。我认为它没有类似的方法。也许你应该考虑转换。对不起:\我刚买了你的书:)这确实照亮了一些黑暗点。