2017-02-19 3 views
1

Я пытаюсь запустить MapReduce из Jupyter Notebook в наборе данных в файле u.data, но я продолжаю получать сообщение об ошибке, в котором говорится: «Объект TypeError: 'str' не поддерживает удаление элемента».Запуск MapReduce из Jupyter Notebook

Как я могу сделать код успешно выполнен?

u.data содержит информацию, как следующее:

196 242 3 881250949 
186 302 3 891717742 
22 377 1 878887116 
244 51 2 880606923 
166 346 1 886397596 
298 474 4 884182806 
115 265 2 881171488 
253 465 5 891628467 
305 451 3 886324817 
6 86 3 883603013 

А вот код:

from mrjob.job import MRJob 

class MRRatingCounter(MRJob): 
    def mapper(self, key, line): 
     (userID, movieID, rating, timestamp) = line.split("\t") 
     yield rating, 1 

    def reducer(self, rating, occurences): 
     yield rating, sum(occurences) 

if __name__ == "main__": 
    MRRatingCounter.run() 

filepath = "u.data" 

MRRatingCounter(filepath) 

Этот код выполняется успешно, если она сохраняет под .py файл и использует команду строка: "питон ratingCounter.py u.data"

ответ

0

MRRatingCounter должен существовать в собственном .py файле, скажем MRRatingCounter.py:

from mrjob.job import MRJob 

class MRRatingCounter(MRJob): 

    def mapper(self, key, line): 
     (userID, movieID, rating, timestamp) = line.split("\t") 
     yield rating, 1 

    def reducer(self, rating, occurences): 
     yield rating, sum(occurences) 

if __name__ == "__main__": 
    MRRatingCounter.run() 

Импорт класса в ваш ноутбук и выполнить его с помощью бегунка:

from MRRatingCounter import MRRatingCounter 

mr_job = MRRatingCounter(args=['u.data']) 
with mr_job.make_runner() as runner: 
    runner.run() 
    for line in runner.stream_output(): 
     #handle each line however you like 
     print line