我尝试从 mrjob 中的映射器输出 python 集。我相应地更改了组合器和减速器的函数签名。
但是,我收到此错误:
Counters From Step 1
Unencodable output:
TypeError: 172804
当我将集合更改为列表时,此错误消失。mrjob 中的映射器是否无法输出某些 python 类型?
我尝试从 mrjob 中的映射器输出 python 集。我相应地更改了组合器和减速器的函数签名。
但是,我收到此错误:
Counters From Step 1
Unencodable output:
TypeError: 172804
当我将集合更改为列表时,此错误消失。mrjob 中的映射器是否无法输出某些 python 类型?
使用协议(通常是 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 协议(对于多个阶段,或设置减速器的输出)。