Como você melhora o desempenho em um trabalho sujo que possui dados muito distorcidos?

Estou executando um script de porco que executa um GROUP BY e um FOREACH aninhado que leva horas para ser executado devido a uma ou duas tarefas de redução. Por exemplo:

B = GROUP A BY (fld1, fld2) parallel 50;

C = FOREACH B {
   U = A.fld1;
   DIST = DISTINCT U;
   GENERATE FLATTEN(group), COUNT_STAR(DIST);
}

Ao examinar os contadores para as tarefas lentas, percebi que parece que os dois redutores estão processando muito mais dados do que as outras tarefas. Basicamente, meu entendimento é que os dados são muito distorcidos e, portanto, as tarefas que são "lentas" estão, na verdade, fazendo mais trabalho do que as tarefas rápidas. Eu só estou querendo saber como melhorar o desempenho? Eu odeio aumentar o paralelismo para tentar dividir o trabalho, mas é o único caminho?

questionAnswers(1)

yourAnswerToTheQuestion