如何在mrjob中读取二进制输入文件?

时间:2014-05-18 21:17:35

标签: binaryfiles mrjob

我的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的解决方案。

1 个答案:

答案 0 :(得分:0)

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

基本上search for "binary data" on mrjob mailing list。 (是的,这是相当明显的;只是在这里添加它以防有人先找到这个问题。)

更重要的是,也许是this is issue 715 on mrjob