Jak poprawić wydajność pracy świni, która ma bardzo przekrzywione dane?

Używam skryptu świni, który wykonuje GROUP BY i zagnieżdżony FOREACH, który wymaga godzin do uruchomienia z powodu jednego lub dwóch zadań zmniejszania. Na przykład:

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

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

Po zbadaniu liczników dla wolnych zadań, zdałem sobie sprawę, że wygląda na to, że dwa reduktory przetwarzają dużo więcej danych niż inne zadania. Zasadniczo rozumiem, że dane są bardzo wypaczone, więc zadania, które są „powolne”, w rzeczywistości wykonują więcej pracy niż szybkie zadania. Zastanawiam się tylko, jak poprawić wydajność? Nienawidzę zwiększania paralelizmu, aby spróbować podzielić pracę, ale czy to jedyny sposób?