Как правильно применить HashPartitioner перед объединением в Spark? - PullRequest
1 голос
/ 21 марта 2019

Чтобы уменьшить перетасовки при объединении двух RDD, я решил сначала разбить их на части, используя HashPartitioner. Вот как я это делаю. Я делаю это правильно, или есть лучший способ сделать это?

val rddA = ...
val rddB = ...

val numOfPartitions = rddA.getNumPartitions

val rddApartitioned = rddA.partitionBy(new HashPartitioner(numOfPartitions))
val rddBpartitioned = rddB.partitionBy(new HashPartitioner(numOfPartitions))

val rddAB = rddApartitioned.join(rddBpartitioned)

1 Ответ

3 голосов
/ 21 марта 2019

Чтобы уменьшить перетасовку при объединении двух СДР,

Удивительно распространенное заблуждение, что перераспределение сокращает или даже устраняет тасования. Это не . Перераспределение в случайном порядке в чистом виде. Это не экономит время, пропускную способность и память.

Объяснение использования упреждающего разделителя другое: оно позволяет один раз перемешать и повторно использовать состояние для выполнения нескольких операций с ключами без дополнительных перемешиваний (хотя, насколько мне известно, не обязательно без дополнительного сетевого трафика, , так как совместное разбиение не подразумевает совместного размещения , исключая случаи, когда тасования происходили в одном действии).

Итак, ваш код верен, но в случае, если вы присоединяетесь один раз, это ничего вам не дает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...