Почему DISTINCT быстрее, чем GROUP BY/FOREACH в Pig

Я понятия не имею, почему DISTINCT быстрее, чем GROUP BY/FOREACH в Pig, они должны быть такими же в MapReduce Framework, но относятся к:

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

В Pig wiki сказано, что "для извлечения уникальных значений из столбца в отношении вы можете использовать DISTINCT или GROUP BY/GENERATE. DISTINCT является предпочтительным методом; он быстрее и эффективнее".

Зачем? инструменты по-разному?

1 ответ

Выходные данные - это отношение, которое содержит только те столбцы, для которых вы различаете, поэтому задания карты выводят только значения для указанных столбцов в качестве ключей и сумматоров, что сводит к минимуму выходные данные карты, что приводит к меньшему количеству входных данных для Редуктора. Выходные данные Group By - это кортеж "группового" ключа и Bag, который содержит все кортежи, имеющие одинаковый групповой ключ со всеми столбцами исходного отношения, поэтому объединители не используются, а выходные данные этапа Map больше и Редукторы имеют больше входов. Свинья может сделать некоторые оптимизации, но они не гарантированы.

Другие вопросы по тегам