var countryMap = Map("Amy" -> "Canada", "Sam" -> "US", "Bob" -> "Canada")
val names = List("Amy", "Sam", "Eric")
sc.parallelize(names).flatMap(broadcastMap.value.get).collect.foreach(println)
//output
Canada
US
Я запускаю это искровое задание в режиме YARN, и я уверен, что драйвер и исполнители не находятся в одном узле / JVM (см. Прилагаемый рисунок).Поскольку countryMap не является широковещательной переменной, исполнитель не должен ее видеть, и этот код не должен ничего печатать.Однако он напечатал Canada
и US
.
Мой вопрос заключается в том, что Spark автоматически заполняет локальные переменные для исполнителей, если они сериализуются?если нет, то как исполнитель видит локальные переменные драйвера?