Hadoop Map减少代码的前N个值

 愛你2502933237 发布于 2023-02-10 14:25

我是hadoop世界的新手,并努力完成一项简单的任务.

任何人都可以通过仅使用Map reduce代码技术告诉我如何获得字数计数的前n个值?

我不想对这个简单的任务使用任何hadoop命令.

1 个回答
  • 你有两个明显的选择:


    有两个MapReduce作业:

      WordCount:计算所有单词(几乎就是这个例子)

      TopN:找到某些东西的前N个MapReduce作业(这里有一些例子:源代码,博客文章)

    让WordCount的输出写入HDFS.然后,让TopN读取该输出.这称为作业链,有许多方法可以解决这个问题:oozie,bash脚本,从你的驱动程序中解雇两个作业等.

    你需要两个工作的原因是你正在做两个聚合:一个是字数,第二个是topN.通常在MapReduce中,每个聚合都需要自己的MapReduce作业.


    首先,让您的WordCount作业运行数据.然后,使用一些bash将顶部N拉出来.

    hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n20
    

    sort -n -k2 -r说"按列#2按数字排序,按降序排列".head -n20排在前二十位.

    这是WordCount的更好选择,因为WordCount可能只输出数千或数万行的顺序,并且您不需要MapReduce作业.请记住,仅仅因为你有hadoop并不意味着你应该用Hadoop解决所有问题.


    一个非显而易见的版本,这是一个棘手但混合了以上两个...

    写一个WordCount MapReduce作业,但是在Reducer中做了类似我之前向你展示的TopN MapReduce作业.然后,让每个reducer只输出该reducer的TopN结果.

    因此,如果您正在进行前十名,每个减速器将输出10个结果.假设您有30个减速器,您将输出300个结果.

    然后,使用bash执行与选项#2相同的操作:

    hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n10
    

    这应该更快,因为您只对结果的一小部分进行后处理.

    这是我能想到的最快的方式,但这可能不值得.

    2023-02-10 14:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有