Python MapReduce Как добавить условный оператор - PullRequest
0 голосов
/ 15 января 2020

Я новичок в MapReduce и пытаюсь найти среднюю оценку mov ie для фильмов в наборе данных MovieLens 100k. У меня есть рабочая программа, которая находит среднюю оценку для каждого mov ie, но я хочу сделать это только для фильмов, которые имеют> 100 обзоров. Как я могу добавить условное утверждение, чтобы сделать это?

from mrjob.job import MRJob

class PopularMovieAvgReview(MRJob):
    def mapper(self, key, line):
        (userID, movieID, rating, timestamp) = line.split('\t')
        yield movieID, float(rating)

    def reducer(self, movieID, rating):
        total = 0
        numElements = 0 
        for x in rating:
            total += x
            numElements += 1
        yield movieID, total / numElements

if __name__ == '__main__':
    PopularMovieAvgReview.run()

1 Ответ

2 голосов
/ 16 января 2020

Если я правильно понимаю, вы хотите ограничить вывод в зависимости от количества присвоенных оценок

def reducer(self, movieID, rating):
    total = 0
    numElements = 0 
    for x in rating:
        total += x
        numElements += 1
    if numElements > 100:
        yield movieID, total / numElements

В качестве альтернативы, используя PySpark, вы можете агрегировать, а затем фильтровать сумму оценок

...