mrjob任务输出集可以吗?

时间:2012-09-23 23:01:19

标签: mrjob

我尝试在mrjob中从mapper输出一个python集。我相应地更改了合成器和缩减器的功能签名。

然而,我收到此错误:

Counters From Step 1
Unencodable output:
TypeError: 172804

当我将集更改为列表时,此错误消失。 mrjob中的映射器是否有某些python类型无法输出?

1 个答案:

答案 0 :(得分:6)

使用协议(通常为Raw,JSON或Pickle)在MapReduce的各个阶段之间移动值。

您必须确保所选择的协议可以正确处理移动的值。我可以想象,集合中没有默认的JSON表示,也许还没有原始表示吗?

尝试将INTERNAL_PROTOCOL设置为Pickle,如下所示:

class yourMR(MRJob):
    INTERNAL_PROTOCOL = PickleProtocol

    def map(self, key, value):
        # mapper

    def reduce(self, key, value):
        # reducer

注意:MRJob会为您处理酸洗和去除污渍,所以不要担心这个问题。如有必要,您还可以设置INPUT和OUTPUT协议(对于多个阶段,或从减速器设置输出)。