2017-02-19 16 views
1

u.dataファイルのデータセットでJupyter NotebookからMapReduceを実行しようとしていますが、「TypeError: 'str'オブジェクトがアイテムの削除をサポートしていません」というエラーメッセージが表示され続けます。JupyterノートブックからMapReduceを実行

コードを正常に実行するにはどうすればよいですか?

u.dataは、次のような情報が含まれています。

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ファイルの下に保存した場合に正常に実行され、およびコマンドを使用しています。

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 

そしてここでは、コードがあります"!python 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 
関連する問題