デフォルトでは、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,
),
]
注意: シングルステップ ジョブのステップを上書きする必要がないことはわかっています。これは最終的に複数ステップの作業になるため、そのようにクラスを構築することが重要です。
ありがとう!