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