簡體   English   中英

從IPython筆記本運行MRJob

[英]Run MRJob from IPython notebook

我試圖從IPython筆記本運行mrjob示例

from mrjob.job import MRJob


class MRWordFrequencyCount(MRJob):

def mapper(self, _, line):
    yield "chars", len(line)
    yield "words", len(line.split())
    yield "lines", 1

def reducer(self, key, values):
    yield key, sum(values)  

然后用代碼運行它

mr_job = MRWordFrequencyCount(args=["testfile.txt"])
with mr_job.make_runner() as runner:
    runner.run()
    for line in runner.stream_output():
        key, value = mr_job.parse_output_line(line)
        print key, value

並得到錯誤:

TypeError: <module '__main__' (built-in)> is a built-in class

有沒有辦法從IPython筆記本運行mrjob?

我懷疑是由於MRJob網站上的這一限制

具有作業類的文件將發送到Hadoop以進行運行。 因此,作業文件無法嘗試啟動Hadoop作業,或者您將以遞歸方式創建Hadoop作業!運行作業的代碼應僅在Hadoop上下文之外運行。

或者,可能是因為您沒有以下( 參考 ):

if __name__ == '__main__':  
  MRWordCounter.run()  # where MRWordCounter is your job class

我還沒有找到“完美的方式”,但你可以做的一件事是創建一個筆記本單元格,使用%%file魔術,將單元格內容寫入文件:

%%file wordcount.py
from mrjob.job import MRJob

class MRWordFrequencyCount(MRJob):

    def mapper(self, _, line):
        yield "chars", len(line)
        yield "words", len(line.split())
        yield "lines", 1

    def reducer(self, key, values):
        yield key, sum(values)

然后讓mrjob在稍后的單元格中運行該文件:

import wordcount
reload(wordcount)

mr_job = wordcount.MRWordFrequencyCount(args=['example.txt'])
with mr_job.make_runner() as runner:
    runner.run()
    for line in runner.stream_output():
        key, value = mr_job.parse_output_line(line)
        print key, value

請注意,我調用了我的文件wordcount.py並從wordcount模塊導入了類MRWordFrequencyCount - 文件名和模塊必須匹配。 Python也會緩存導入的模塊,當你更改wordcount.py文件時,iPython不會重新加載模塊,而是使用舊的緩存模塊。 這就是我把reload()調用放在那里的原因。

參考: https//groups.google.com/d/msg/mrjob/CfdAgcEaC-I/8XfJPXCjTvQJ

更新(更短)
對於較短的第二個筆記本單元,您可以通過從筆記本中調用shell來運行mrjob

! python mrjob.py shakespeare.txt

參考: http ://jupyter.cs.brynmawr.edu/hub/dblank/public/Jupyter%20Magics.ipynb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM