从IPython notebook运行MRJob

5
我正在尝试从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?
2个回答

3

我还没有找到“完美的方法”,但你可以通过使用%%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

这是一个关于Jupyter Magic的笔记本,它提供了一些有用的技巧和工具,可以帮助您更有效地使用Jupyter Notebook。在这个笔记本中,您将学习如何使用Jupyter Magic进行代码注释、调试、性能分析以及其他有用的操作。

1
我怀疑是因为 MRJob 网站上提到的 此限制 导致的:

作业类文件被发送到 Hadoop 运行。因此,作业文件不能尝试启动 Hadoop 作业,否则,您将递归创建 Hadoop 作业!运行作业的代码应仅在 Hadoop 上下文之外运行。

或者,可能是因为您没有以下内容(参考资料):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接