1

Pig で DISTINCT が GROUP BY/FOREACH よりも高速である理由がわかりません。MapReduce フレームワークでも同じである必要がありますが、以下を参照してください。

http://pig.apache.org/docs/r0.10.0/perf.html#distinct

Pig wiki には、「リレーション内の列から一意の値を抽出するには、DISTINCT または GROUP BY/GENERATE を使用できます。DISTINCT が推奨される方法です。より高速で効率的です。」

なんで?さまざまな方法で実装されていますか?

4

1 に答える 1

3

個別の出力は、個別の列のみを含むリレーションであるため、Map ジョブは指定された列の値のみをキーとして出力し、コンバイナーはマップのスピル出力を最小限に抑え、Reducer への入力をさらに減らします。Group By の出力は、「グループ」キーのタプルと、元のリレーションのすべての列と同じグループ キーを持つすべてのタプルを含む Bag です。したがって、コンバイナーは使用されず、Map ステージの出力はより大きく、レデューサーにはより多くの入力があります。Pig はいくつかの最適化を行うことができますが、保証はされていません。

于 2013-01-16T10:19:43.757 に答える