私は riak バケットにデータを持っています。python-riak クライアントを使用して以下のようなデータを取得しています。
<<"{\"META\": {\"campaign\": \"5IVUPHE42HP1NEYvKb7qSvpX2Cm\",
\"createdat\": 1406978070.0,
\"user_email\": \"gopikrishnajonnada@gmail.com\"},
\"mode\": 2,
\"status\": \"success\"}">>
上記のデータ形式は、すべてのキーに対して存在します。
そのため、python-riak クライアントを使用したマップ フェーズから、次のようなデータを取得しています。
[{'5IVUPHE42HP1NEYvKb7qSvpX2Cm': 1},
{'WL6iHLCgs492rFEFvqewzvCfFfj': 2},
{'5IVUPHE42HP1NEYvKb7qSvpX2Cm': 1},
{'5IVUPHE42HP1NEYvKb7qSvpX2Cm': 2}]
したがって、上記のデータについては、以下のような python-riak クライアントで使用しているときに出力を提供する必要がある erlang で reduce フェーズを記述する必要があります。
{'5IVUPHE42HP1NEYvKb7qSvpX2Cm': {'ab_leads': 2, 'cp_leads': 1},
'WL6iHLCgs492rFEFvqewzvCfFfj': {'ab_leads': 0, 'cp_leads': 1}}
したがって、マップ フェーズの [{key,Value}] のリストから、これに基づいて、{key ,Value} 値が 0 または 1 の場合、ab_leads のような新しい変数の特定のキーをインクリメントまたはカウントする必要があります。2 の場合、cp_leads のような新しい変数の特定のキーをカウントする必要があります。
したがって、リストの特定のキーについて、そのキーが 0 の場合は ab_leads を増やすか、2 の場合は cp_leads を増やす必要があります。
だから私は以下のように試してきましたが、これは私が望むように与えていません。また、前のリストの結果をキャッチする必要があり、riakがreduceフェーズがどのようにminの値を取るかを言うように、次の値のリストに追加する必要があります1ラウンドあたり20
lists:foldl(fun({Key,Mode},Acc) -> if Mode == 0;Mode == 1 -> orddict:update_counter({Key,<<"ab_leads">>},1,Acc); true -> orddict:update_counter({Key,<<"cp_leads">>},1,Acc) end end,orddict:new(),G).
上記のものはこのような結果を与えています
[{{<<"a">>,<<"ab_leads">>},2},{{<<"a">>,<<"cp_leads">>},1}]
だから私は上記のような結果が欲しいと言ったように上記を変換する必要があります
[{Key,{ab_leads:1,cp_leads:2}}]