Если вы ограничиваете себя:
RDD
API. groupByKey
+ mapValues
против reduceByKey
+ join
прежний будет предпочтительным.Так как RDD.join
реализован с использованием cogroup
, стоимость последней стратегии может быть только выше, чем groupByKey
(cogroup
на нередуцированном RDD
будет эквивалентно groupByKey
, но вам дополнительно понадобится полный тасование дляreduceByKey
).Пожалуйста, имейте в виду, что если группы слишком велики, ни одно из решений не будет осуществимо.
Однако это может быть не оптимальным выбором.В зависимости от размера каждой группы и общего количества групп, вы можете достичь гораздо лучшей производительности, используя широковещательное соединение .
В то же время DataFrame
API поставляется со значительноулучшено внутреннее перемешивание и может автоматически применяться некоторая оптимизация, включая широковещательные соединения.