使用 mrjob 的文本文件中的前十个值
Top Ten Values from a text file using mrjob
我正在尝试获取文件中的前 10 项。该文件是一个文本文件。该文件看起来像这样:
10000
10001
10002
10003
10004
10005
10090
10011
10060
10050
10040
11000
20000
这是我尝试过的方法,但它一直给我一个错误:
from mrjob.job import MRJob
class MRWordCount(MRJob):
def mapper(self,_,lines):
for number in lines.split(','):
yield None, number
def reducer(self,key, numbers):
self.alist = []
for number in numbers:
self.alist.append(number)
self.topten = []
for i in range(10):
self.topten.append(max(self.topten))
self.alist.remove(max(self.alist))
for i in range(10):
yield self.topten[i]
if __name__ == '__main__':
MRWordCount.run()
我得到的错误是:
ValueError: too many values to unpack (expected 2)
我想要做的只是对这个文件中的这些值进行排序,然后输出文件中从高到低排序的前十个数字。任何人都知道我将如何使用 mrjob 执行此操作或知道如何解决我遇到的错误?需要说明的是,我并不是要获取文件本身中最常出现的值,而只是文件本身中的前十个值。
from mrjob.job import MRJob
class Top10Integers(MRJob):
def mapper(self, key, line):
for integer in line.split():
yield None, int(integer)
def reducer(self, key, values):
integers = list(values)
integers.sort(reverse=True)
integers = integers[:10]
for integer in integers:
yield None, integer
if __name__ == '__main__':
Top10Integers.run()
我正在尝试获取文件中的前 10 项。该文件是一个文本文件。该文件看起来像这样:
10000
10001
10002
10003
10004
10005
10090
10011
10060
10050
10040
11000
20000
这是我尝试过的方法,但它一直给我一个错误:
from mrjob.job import MRJob
class MRWordCount(MRJob):
def mapper(self,_,lines):
for number in lines.split(','):
yield None, number
def reducer(self,key, numbers):
self.alist = []
for number in numbers:
self.alist.append(number)
self.topten = []
for i in range(10):
self.topten.append(max(self.topten))
self.alist.remove(max(self.alist))
for i in range(10):
yield self.topten[i]
if __name__ == '__main__':
MRWordCount.run()
我得到的错误是:
ValueError: too many values to unpack (expected 2)
我想要做的只是对这个文件中的这些值进行排序,然后输出文件中从高到低排序的前十个数字。任何人都知道我将如何使用 mrjob 执行此操作或知道如何解决我遇到的错误?需要说明的是,我并不是要获取文件本身中最常出现的值,而只是文件本身中的前十个值。
from mrjob.job import MRJob
class Top10Integers(MRJob):
def mapper(self, key, line):
for integer in line.split():
yield None, int(integer)
def reducer(self, key, values):
integers = list(values)
integers.sort(reverse=True)
integers = integers[:10]
for integer in integers:
yield None, integer
if __name__ == '__main__':
Top10Integers.run()