【问题标题】:How to reuse broadcast variable in Spark?如何在 Spark 中重用广播变量?
【发布时间】:2017-11-10 11:00:47
【问题描述】:

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

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

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      EdhBroadcast 广播 = 新 EdhBroadcast(JavaSparkContext);

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-18
          • 1970-01-01
          • 2016-11-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多