Еще две вещи, которые стоит упомянуть, кроме ответа Рафаэля, который является правильным.Вы всегда должны учитывать размер передаваемой переменной, он не должен быть слишком большим, иначе Spark столкнется с трудностями при его эффективном распределении по кластеру.В вашем случае это:
4B x 1000000 = 4000000B ~ 4GB
, которое уже превышает значение по умолчанию 4 МБ и может управляться путем изменения значения на spark.broadcast.blockSize
.
Еще один фактор для принятия решенияиспользовать или нет трансляцию, когда у вас есть объединений и вы хотите избежать перетасовки.Посредством широковещательной передачи кадра данных ключи будут сразу же доступны в узле, что позволит избежать извлечения данных из разных узлов (тасование).