【发布时间】:2020-01-19 22:09:02
【问题描述】:
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 模式下运行这个 spark 作业,我确信驱动程序和执行程序不在同一个节点/JVM 中(参见附图)。由于 countryMap 不是广播变量,因此执行程序不应该看到它,并且此代码不应该打印任何内容。但是,它打印了Canada 和US。
我的问题是,如果局部变量是可序列化的,Spark 是否会自动将局部变量填充到执行程序?如果不是,executor如何查看驱动的局部变量?
【问题讨论】:
标签: scala apache-spark distributed broadcast