2011-09-21 5 views

答えて

12

パフォーマンスに大きな違いはありません。私がこれを言うのは、同じデータをレデューサーに送る単一のMapReduceジョブであるということです。両方とも、キーが外部キーである状態ですべてのレコードを転送する必要があります。まったくの場合、COGROUPは少し速くなるかもしれません。なぜなら、それはヒットを越えてデカルト製品を行わず、それらを別々の袋に入れておくからです。

データセットの1つが小さい場合は、"replicated join"というジョインオプションを使用できます。これにより、2番目のデータセットがすべてのマップタスクに分散され、メインメモリにロードされます。この方法では、マッパーで結合全体を行うことができ、減速器は必要ありません。私の経験では、これは非常に価値があります。なぜなら、結合とコグループのボトルネックは、データセット全体をレジューサーに入れ替えることだからです。私の知る限りCOGROUPでこれを行うことはできません。

+0

内部的には、joinとcogroupはPigと同じです(ジョインではデカルト結合はありません)。使用したキーワードによって最終結果の形式のみが変わります。結合の結果を「記述」すると、EXPLAIN計画にCOGROUP演算子が表示されます。 – SquareCog

+0

私がデカルト積を意味するのは、外部キーに複数の一致がある場合、より多くのレコードが得られるということです。たとえば、1つのデータセットに3つの "abcde"があり、2つ目のデータセットに4つの "abcde"がある場合、各レコードに一致する12 xレコードが出力されます。一方、COGROUPでは、関係を別々に保ちます。 –