Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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/7/wcf/4.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
Python 如何使用MapReduce对键、值对进行排序?_Python_Mapreduce_Mrjob - Fatal编程技术网

Python 如何使用MapReduce对键、值对进行排序?

Python 如何使用MapReduce对键、值对进行排序?,python,mapreduce,mrjob,Python,Mapreduce,Mrjob,我一直在玩MapReduce,它还是很新的,我想知道我能否得到一些帮助来回答一个我很难回答的问题: 我有一个包含日期和计数的txt文件,希望根据各自的计数按升序对日期进行排序。文本文件如下所示: import re 我环顾四周,发现了如下代码: import re 从mrjob.job导入mrjob 从mrjob.step导入MRStep WORD_RE=RE.compile(r“[\w']+”) 类别MRWordFrequencyCount(MRJob): 但这似乎太复杂了,因为正如您从

我一直在玩MapReduce,它还是很新的,我想知道我能否得到一些帮助来回答一个我很难回答的问题: 我有一个包含日期和计数的txt文件,希望根据各自的计数按升序对日期进行排序。文本文件如下所示:

import re

我环顾四周,发现了如下代码:

import re
从mrjob.job导入mrjob 从mrjob.step导入MRStep

WORD_RE=RE.compile(r“[\w']+”)

类别MRWordFrequencyCount(MRJob):

但这似乎太复杂了,因为正如您从postedDates txt文件中看到的,我已经有了密钥和它们各自的计数。那么,我是否只需要添加第二步,这只是一个reducer函数,它使用“sorted(counts)”对键和值列表进行排序


非常感谢您的时间。

考虑到您的特殊设置,您是正确的,当然可以使用单个MapReduce执行任务

您可以跳过示例中的初始步骤,因为您已经有了每个日期(键)的计数。您只需执行第二步,将这些对分组为元组,并根据
count
date


按升序计数
导入日期时间
从mrjob.job导入mrjob
类别MRDateFrequencyCount(MRJob):
def映射器(自身、线):
日期,计数=行分割(“”)
无收益,(整数(计数),日期)
def减速器(自、自、日期):
对于计数,排序的日期(日期,key=lambda x:(x[0],datetime.datetime.strtime(x[1],“%Y-%m-%d”):
收税日期
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
MRDateFrequencyCount.run()
产生输出:

"\"2006-11-01\""    1
"\"2006-12-21\""    1
"\"2006-12-11\""    2
"\"2007-03-12\""    3
"\"2007-03-12\""    3
"\"2006-12-11\""    2
"\"2006-11-01\""    1
"\"2006-12-21\""    1

按降序计数
导入日期时间
从mrjob.job导入mrjob
类别MRDateFrequencyCount(MRJob):
def映射器(自身、线):
日期,计数=行分割(“”)
无收益,(整数(计数),日期)
def减速器(自、自、日期):
对于计数,排序的日期(日期,key=lambda x:(-x[0],datetime.datetime.strtime(x[1],“%Y-%m-%d”)):
收税日期
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
MRDateFrequencyCount.run()
产生输出:

"\"2006-11-01\""    1
"\"2006-12-21\""    1
"\"2006-12-11\""    2
"\"2007-03-12\""    3
"\"2007-03-12\""    3
"\"2006-12-11\""    2
"\"2006-11-01\""    1
"\"2006-12-21\""    1
注意:如果图像中的数据的格式与我在下面测试的文本中显示的格式不同,则需要更改
strtime
格式字符串
'%Y-%m-%d'


这两个MRJob都在没有配置的情况下运行,并且在包含以下文本的文本文档上运行:

"2006-12-21" 1
"2007-03-12" 3
"2006-11-01" 1
"2006-12-11" 2
当然,如果您想更改哪一列(计数或日期)排在第一位或第二位,您可以在任何一个reducer中更改
yeild


您还可以使用字符串格式来消除数据集中日期周围的

哇,非常感谢您的详细回复。这对我的理解有很大帮助。谢谢