java-应该使用map的自定义分区程序遵循哪种逻辑来解决此问题
作者:互联网
如果在文件中密钥分配像是99%的单词以’A’开头,而1%的单词以’B’到’Z’开头,并且您必须计算每个字母开头的单词数,那么如何分配密钥有效率的?
解决方法:
解决方案1:我认为要走的路是组合器,而不是分区器.组合器将汇总以字母“ A”开头的单词的局部和,然后将部分和(而不是始终为1)发送给缩减器.
解决方案2:但是,如果您坚持为此使用自定义分区程序,则可以在单独的化简器中处理比字母“ A”开头的单词,而不是其他所有单词,即仅对以字母“ A”开头的单词专用化简器. .
解决方案3:此外,如果您不介意“作弊”,则可以为以字母“ A”开头的单词定义一个计数器,并在映射阶段对其进行递增.然后,只需忽略这些单词(无需通过网络发送它们),并对其他单词使用默认分区程序.作业完成后,获取计数器的值.
解决方案4:如果您不介意进一步“作弊”,请定义26个计数器,每个字母一个,然后根据当前单词的第一个字母在映射阶段对其进行递增.您不能使用任何减速器(将减速器的数量设置为0).这将节省所有排序和改组.作业完成后,检索所有计数器的值.
标签:mapreduce,hadoop,load-balancing,hadoop-partitioning,java 来源: https://codeday.me/bug/20191028/1951679.html