4

mrjobのマッパーからPythonセットを出力してみました。それに応じて、コンバイナーとレデューサーの関数シグネチャを変更しました。

ただし、次のエラーが発生します。

Counters From Step 1
Unencodable output:
TypeError: 172804

セットをリストに変更すると、このエラーは消えます。mrjobのマッパーで出力できない特定のPythonタイプはありますか?

4

1 に答える 1

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プロトコルを設定することもできます(複数のステージの場合、またはレデューサーからの出力を設定します)。

于 2013-02-17T23:14:15.427 に答える