mrjob:在reducer输出中抑制键(或值)

Abe*_*Abe 1 mrjob

默认情况下,mrJob以key [tab]输出格式存储密钥和输出值.

即使键(或值)为空,空或其他不感兴趣,也会发生这种情况.假设我的键,值对是None,{"a":1","b":1}.然后我得到这个:

None    {"a":1, "b":2}
Run Code Online (Sandbox Code Playgroud)

有没有办法压制关键或价值?我只想要这个:

{"a":1, "b":2}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我已经尝试过了.我错过了什么......?

class MyMrJobClass(MRJob):
    OUTPUT_PROTOCOL = mrjob.protocol.JSONProtocol

    def step1_mapper(self, _, line):
        ...
        yield my_key, my_value

    def step1_reducer(self, key, values):
        for v in values:
            ...
        yield None, my_data

    def steps(self):
        return [
            self.mr(
                mapper=self.step1_mapper,
                reducer=self.step1_reducer,
            ),
        ]
Run Code Online (Sandbox Code Playgroud)

注意:我知道我不需要覆盖单步工作的步骤.这最终将是一个多步骤的工作,因此以这种方式构建类非常重要.

谢谢!

jkg*_*yti 5

您可以使用mrjob.protocol.JSONValueProtocol(注意.请参阅文档)作为输出协议而不是mrjob.protocol.JSONProtocol.

该文档包含有关使用自定义协议的更多信息.