私の理解では、パーセンタイルを計算することです。データをソートする必要があります。複数のサーバーにまたがる大量のデータを移動せずに、これは可能でしょうか?
3 に答える
パラダイムとしての MapReduce はこの問題に適していないように見えますが、hadoop の MR の実装は適しています。Hadoop の map reduce の実装は、分散ソート
に基づいています。これが必要なものです。Hadoop は、サーバー間でデータを 1 回だけ移動することで並べ替えを行っていますが、それほど悪くはありません。
Hadoop で大量のデータをソートするための優れた (そしておそらく最良の) 方法を説明している Hadoop terasort の実装を参照することをお勧めします。http://hadoop.apache.org/docs/current/api/org/apache/hadoop/examples/terasort/package-summary.html
最初に、1 台または複数台のマシンでヒストグラムを作成します。可能な値のバケットの各可能な値のカウントを取得したら、必要に応じてこれらを組み合わせることができます。ヒストグラムを使用する利点は、O(log n) ではなく O(1) の挿入/並べ替え時間があり、N が O(N) の代わりに M が可能な値またはバケットの数である O(M) スペースを使用することです。サンプル数です。
ヒストグラムは自然にソートされるため、合計カウントを取得し、両端からカウントしてパーセンタイルを見つけることができます。