1

私はこれがかなりの回数議論されていることを知っていますが、私のシナリオは、レート制限チェックを無効にすることを叫ぶと思います:

ドキュメントの形式は次のとおりです。

{ prefix: "004945", country: "Germany", type: "Mobile", carrier: "OrangeTel", price: "34"}
{ prefix: "004946", country: "Germany", type: "Mobile", carrier: "SomeOther", price: "46"}
.
.
.
{ prefix: "00807", country: "Unknown", type: "Satelite", carrier: "Inmarsat", price: "123"}

[country, type, carrier]これらのプレフィックスの配列をいくつかのキーまたはキー[country, type]で取得したい

だから私はこのようにマッピングします:

emit( [country, type, carrier],[prefix] ) そして私はこのように減らします:

reduce: function(keys, values, rereduce) { 
           return values.reduce(function(a, b) {return a.concat(b);})
        }

問題は、明らかに同じ量のデータを異なる形で返すため、縮小率が十分でないことです。多くの要素を含むリストを変換し、それぞれにデータがほとんどなく、それぞれが多くのデータを含む少数の要素のリストに変換します。

リスト関数などで回避できることはわかっていますが、チェックを無効にするシナリオは有効だと思います。また、存在する場合は、それらのドキュメントの構造を変更せずに map-reduce ソリューションを使用するアイデアをお願いします。ありがとう。

4

1 に答える 1

0

reduce 関数の主なタスクは、map 関数によって生成された結果を減らすことです。

マップ関数は[prefix]値として出力され[prefix]、キーごとに異なり、キーを削減/グループ化したいので、おそらく[prefix]各グループの重複を表示しないことに興味がありますよね?

次のreduce関数は、値配列からセットを作成[prefix]し、キーのユニークで短いリストを生成する必要があり、シャークレートの問題に悩まされることはありません。削減されたキーに対して発生する異なるプレフィックスの数をカウントする必要がある場合、これは別の関数になりますが、ターゲットは同じです: reduce reduce と rereduce long list of values(:

function(keys, values, rereduce){
  var prefixes = [];
  var update_set = function(src, dst){
    for (var idx in src){
      item = src[idx];
      if (dst.indexOf(item) == -1){
        dst.push(item);
      }
    }
    return dst;
  }
  if (rereduce){
    for (var idx in values){
      update_set(values[idx], prefixes);
    }
  }
  else{
    update_set(values, prefixes);
  }
  return prefixes;
}
于 2012-11-06T01:13:59.957 に答える