Книга действительно не предлагает предварительное разбиение.Он описывает только поведение *ByKey
методов при применении к секционированным RDD
.Учитывая, что само разбиение - это случайное перемешивание , заключение о том, что вы должны превентивно разделить ваши данные для одного reduceByKey
, неоправданно.
На самом деле, еслиданные содержат N значений с K уникальными ключами и P
разделами, размер шаффла в сценарии reduceByKey
∘ partitionBy
всегда больше и равен размеруперемешивание только с reduceByKey
.
Если вы собираетесь подать кратную амортизированную стоимость partitionBy
, за которой следует набор *byKey
или *Join
приложений, может быть ниже, чемстоимость применения *byKey
методов.Точно так же, если вы уже перетасовали данные как часть другой операции и собираетесь применить операцию перетасовки позже, вам следует попытаться сохранить существующее разбиение.Это, однако, не означает, что вы всегда должны предпочитать сначала partitionBy
.