Существенных отличий в производительности нет.Причина, по которой я говорю это, заключается в том, что оба они в конечном итоге представляют собой одно задание MapReduce, которое отправляет одни и те же данные в редукторы.Оба должны отправить все записи вперед с ключом, являющимся внешним ключом.Если вообще, COGROUP
может быть немного быстрее, потому что он не обрабатывает декартово произведение по хитам и хранит их в отдельных пакетах.
Если один из ваших наборов данных небольшой, вы можете использоватьопция соединения называется "реплицированное соединение" .Это распределит второй набор данных по всем задачам карты и загрузит его в основную память.Таким образом, он может сделать все соединение в маппере и не нуждается в редукторе.По моему опыту, это очень того стоит, потому что узким местом в соединениях и cogroups является перетасовка всего набора данных в редуктор.Насколько мне известно, вы не можете сделать это с COGROUP
.