2011-09-21 16 views

Respuesta

12

No hay mayores diferencias de rendimiento. La razón por la que digo esto es que ambos terminan siendo un solo trabajo de MapReduce que envía los mismos datos a los reductores. Ambos necesitan enviar todos los registros con la clave siendo la clave externa. Si lo hace, el COGROUP puede ser un poco más rápido porque no hace que el producto cartesiano atraviese los golpes y los mantiene en bolsas separadas.

Si uno de sus conjuntos de datos es pequeño, puede usar una opción de unión llamada "replicated join". Esto distribuirá el segundo conjunto de datos en todas las tareas del mapa y lo cargará en la memoria principal. De esta forma, puede hacer la unión completa en el mapeador y no necesita un reductor. En mi experiencia, esto es muy valioso porque el cuello de botella en las uniones y cogrupos es la mezcla de todo el conjunto de datos al reductor. No puede hacer esto con COGROUP, que yo sepa.

+0

Internamente, unirse y cogrupo son lo mismo en Pig (y no hay una unión cartesiana en las uniones, no estoy seguro de lo que quiere decir allí). Solo el formato del resultado final cambia según la palabra clave que utilizó. Intenta "describir" el resultado de una unión: verás al operador COGROUP en el plan de explicación. – SquareCog

+0

Lo que quiero decir con producto cartesiano, es que si hay varias coincidencias en la clave externa, obtendrá más registros. Por ejemplo, si hay 3x "abcde" en el conjunto de datos, y luego 4x "abcde" en el segundo conjunto de datos, genera 12x registros porque hace coincidir cada uno. Mientras tanto, en COGROUP, mantiene las relaciones separadas. –