4

我尝试从 mrjob 中的映射器输出 python 集。我相应地更改了组合器和减速器的函数签名。

但是,我收到此错误:

Counters From Step 1
Unencodable output:
TypeError: 172804

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

4

1 回答 1

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 协议(对于多个阶段,或设置减速器的输出)。

于 2013-02-17T23:14:15.427 回答