Я хочу, чтобы эта карта уменьшала работу (код ниже) для вывода 10 самых рейтинговых продуктов. Он продолжает давать мне следующее сообщение об ошибке:MapReduce job, чтобы получить 10 лучших значений с использованием MRjob Python
it = izip (iterable, count (0, -1)) # decorate ТипError: аргумент izip # 1 должен поддерживать итерацию.
Я думаю, что это имеет отношение к nlargest Функция, которую я пытаюсь применить.
Любые указатели?
Спасибо!
from mrjob.job import MRJob
from mrjob.step import MRStep
from heapq import nlargest
class MostRatedProduct(MRJob):
def steps(self):
return [
MRStep(mapper = self.mapper_get_ratings,
reducer = self.reducer_count_ratings),
MRStep(reducer = self.reducer_find_top10)
]
def mapper_get_ratings(self, _, line):
(userID, itemID, rating, timestamp) = line.split(',')
yield itemID, 1
def reducer_count_ratings(self, itemID, ratingCount):
yield None, (sum(ratingCount), itemID)
def top_10(self, ratingPair):
for ratingTotal, itemID in ratingPair:
top_rated = nlargest(10, ratingTotal)
for top_rated in ratingTotal:
return (ratingTotal, itemID)
def reducer_find_top10(self, key, ratingPair):
ratingTotal, itemID = self.top_10(ratingPair)
yield ratingTotal, itemID
if __name__ == '__main__':
MostRatedProduct.run()