0

我的 MapReduce 程序的输入是一组二进制文件。我希望能够通过 mrjob 阅读它们。经过一番研究,似乎我必须编写一个自定义的 hadoop 流媒体 jar。有没有更简单的方法?还是这样的罐子很容易买到?更多详情如下。

输入文件只是一个 8 字节整数序列。我希望一次用 2 个整数调用我的映射器函数。

我首先想到我可以转换成pickle二进制格式,然后指定:

INPUT_PROTOCOL = mrjob.protocol.PickleProtocol。

但这给出了一个错误:无法解码输入。我也觉得 mrjob 只能使用 pickle ascii 格式(而不是二进制)。因为否则hadoop流将如何处理看起来像换行符的字节。mrjob 源代码似乎证实了这一点。

另一种选择是编写一个自定义的 hadoop 流 jar。mrjob 可以选择指定这样的 jar。但作为不熟悉 hadoop/Java 的人,我更喜欢基于 python 的解决方案。

4

1 回答 1

0

在进一步的研究中,我发现有用的帖子可能不会直接解决我的问题,但可以解决整体问题。

基本上在 mrjob 邮件列表上搜索“二进制数据”。(是的,这很明显;只需将其添加到此处,以防有人首先发现此问题。)

更重要的是,也许这是 mrjob 上的第 715 期

于 2014-05-19T16:13:03.957 回答