2012-04-26 7 views
2

Map/ReduceとCouchDBの両方で、アマチュアをランク付けします。レコードのビューを示す〜600,000行のデータが格納されたCouchDBがあります。私の望みは、データセット全体にわたって、レコードごとのヒットを示すグラフを生成することです。CouchDB - MapReduceの結果を2番目のMapReduce関数に渡します。

私が実装している地図/ように、グループ化を行うための機能を削減:

function(doc) { 
    emit(doc.id, doc); 
} 

とを:

function(key, values) { 
    return values.length; 
} 

まだそこに減少した値のかなりの量だと我々は唯一たいので、グラフ上に100個のデータポイントがありますが、これはあまり役に立ちません。さらに、それは永遠に実行するのにかかる。

私はすべてのX番目の行を取り出すことができますが、の理想的なは、これらの縮小された結果を別のreduce関数に渡して、最終的にその値の平均をとります。結果は、ヒットの分布を見るために高レベルの概要グラフに投げ込むのに便利です。

これは可能ですか? (もしそうなら、キーはどうなるでしょうか)それとも、私のMapReduceコードで何かを混乱させてしまったので、アプリケーションコードでこれを行うことができますか?わずか33,500の結果が返されます。

おかげで、 マット

+0

2つの関連する質問 - レイテンシがネットワーク上でJSONをチャーンアウトしている場合、カスタムJSベースのポスト処理をサーバー上で行うための機能はありますか?あるいは、私はちょうど間違っているのですか?特に[この記事](http://wiki.apache.org/couchdb/How_to_handle_stats_aggregation)を読んだあと、私がCouchDBに到達する前にあらかじめ集計する必要があるかどうかは疑問です。(これはうまくいきません。データセット全体の要約を常に参照する必要があります。つまり、時間によって分割されません.CouchDBを使用しないでください。 私は実際にそれがうまくいかないことにそれを強制しようとしていますか? – nullPainter

+0

この記事をもう一度読むと、生のアクセスログデータのインデックスを作成する代わりに、レコードごとのヒット数を適切に細かく設定することができます(レコードあたりのヒット数/日)。実験します! – nullPainter

答えて

1

自分の質問に答えるために:this articleによると

  1. をするが、CouchDBのは、/パッシング地図をサポートする別のマップへの入力として出力を下げ/機能を低下させません記事では、discoなどの他のプロジェクトでこれをサポートしていることに注意してください。

  2. カスタムサーバー側の処理は、たとえばsorting by valueのようにCouchDBリストを使用して実行できます。

関連する問題