我的MapReduce程序的输入是一组二进制文件。我希望能够通过mrjob阅读它们。经过一些研究,似乎我必须编写一个自定义的hadoop流媒体jar。有更简单的方法吗?或者这样的罐子随时可用?更多详情如下。
输入文件只是一个8字节整数的序列。我想让我的mapper函数一次调用2个整数。
我首先想到我可以转换成pickle二进制格式,然后指定:
INPUT_PROTOCOL = mrjob.protocol.PickleProtocol。
但是这会产生错误:无法解码输入。我也觉得mrjob只能使用pickle ascii格式(而不是二进制)。因为否则hadoop流将如何处理看起来像换行符的字节。 mrjob源代码似乎证实了这一点。
另一种选择是编写一个自定义的hadoop流媒体jar。 mrjob可以选择指定这样的jar。但是作为一个不熟悉hadoop / Java的人,我更喜欢基于python的解决方案。
答案 0 :(得分:0)
在进一步的研究中,我发现有用的帖子可能无法直接解决我的问题,但解决了整体问题。
基本上search for "binary data" on mrjob mailing list。 (是的,这是相当明显的;只是在这里添加它以防有人先找到这个问题。)
更重要的是,也许是this is issue 715 on mrjob。