我的 MapReduce 程序的输入是一组二进制文件。我希望能够通过 mrjob 阅读它们。经过一番研究,似乎我必须编写一个自定义的 hadoop 流媒体 jar。有没有更简单的方法?还是这样的罐子很容易买到?更多详情如下。
输入文件只是一个 8 字节整数序列。我希望一次用 2 个整数调用我的映射器函数。
我首先想到我可以转换成pickle二进制格式,然后指定:
INPUT_PROTOCOL = mrjob.protocol.PickleProtocol。
但这给出了一个错误:无法解码输入。我也觉得 mrjob 只能使用 pickle ascii 格式(而不是二进制)。因为否则hadoop流将如何处理看起来像换行符的字节。mrjob 源代码似乎证实了这一点。
另一种选择是编写一个自定义的 hadoop 流 jar。mrjob 可以选择指定这样的 jar。但作为不熟悉 hadoop/Java 的人,我更喜欢基于 python 的解决方案。