如何在Spark中重用广播变量?

时间:2017-11-10 11:00:48

标签: apache-spark

我正在使用广播变量来加入Spark中的操作。但是我遇到了关于从驱动程序加载到执行程序的时间广播的问题。所以我只想加载一次但是用于多个作业(范围应用程序周期)。

链接我的参考:https://github.com/apache/spark/blob/branch-2.2/core/src/test/scala/org/apache/spark/broadcast/BroadcastSuite.scala

3 个答案:

答案 0 :(得分:1)

广播变量与作业无关,而与会话/上下文无关。如果您重复使用相同的SparkSession,则可能会重复使用广播变量。如果我没记错的话,在某些类型的内存压力下,工作人员可以清除广播变量,但如果被引用,它将自动重新广播以满足参考。

答案 1 :(得分:0)

广播变量,可用于缓存所有节点的内存中的值。广播变量允许程序员在每台机器上保留一个只读变量,而不是随副本一起发送它的副本。例如,它们可用于以有效的方式为每个节点提供大型输入数据集的副本。

EdhBroadcast broadcast = new EdhBroadcast(JavaSparkContext);

答案 2 :(得分:0)

不可能使用广播变量向每个工作人员发送一次不可变状态。如果需要变量的本地副本,可以使用它们。

您可以创建rdd和缓存rdd并重复使用。