2

デフォルトでは、mrJob は出力からのキーと値を key[tab]output 形式で保存します。

これは、キー (または値) が空、null、またはそうでない場合でも発生します。私のキーと値のペアが None、{"a":1", "b":1} であると仮定すると、次のようになります。

None    {"a":1, "b":2}

キーまたは値を抑制する方法はありますか? 私はこれが欲しい:

{"a":1, "b":2}

ところで、私はすでにこれを試しました。何か足りないのでしょうか...?

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,
            ),
        ]

注意: シングルステップ ジョブのステップを上書きする必要がないことはわかっています。これは最終的に複数ステップの作業になるため、そのようにクラスを構築することが重要です。

ありがとう!

4

1 に答える 1