|
|
1
3
至少在spark 2.4.0中,您的问题的答案是,数据帧将保留在驱动程序进程的内存中,直到sparkContext完成,也就是说,直到应用程序结束。 事实上,广播联接是使用广播变量实现的,但是当使用数据帧API时,您无法访问下属广播变量。Spark本身不会在内部使用后破坏这个变量,所以它只是停留在周围。
具体来说,如果您查看BroadcastExchangeExec的代码(
https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/BroadcastExchangeExec.scala
,可以看到它创建了一个私有变量。
|
|
|
2
0
这里的想法是在连接之前创建广播变量,以便轻松控制它。没有它,你就无法控制这些变量-火花为你做。 例子:
对于所有广播变量(自动在联接中创建或手动创建),应用此规则:
|