Ответ 1
Если у вас есть огромный массив, к которому обращаются от Spark Closures, например, некоторые ссылочные данные, этот массив будет отправлен в каждую искру node с закрытием. Например, если у вас 10 кластеров узлов со 100 разделами (10 разделов на node), этот массив будет распределен не менее 100 раз (10 раз для каждого node).
Если вы используете широковещательную рассылку, он будет распространяться один раз за node с использованием эффективного протокола p2p.
val array: Array[Int] = ??? // some huge array
val broadcasted = sc.broadcast(array)
И некоторые RDD
val rdd: RDD[Int] = ???
В этом случае массив будет поставляться с закрытием каждый раз
rdd.map(i => array.contains(i))
и с трансляцией вы получите огромное преимущество в производительности
rdd.map(i => broadcasted.value.contains(i))