gpt4 book ai didi

apache-spark - spark广播变量的缺点是什么?

转载 作者:行者123 更新时间:2023-12-04 17:54:26 25 4
gpt4 key购买 nike

我已经阅读了 SO 中的 spark doc 和其他相关问答,但我仍然不清楚有关 Spark Broadcast 变量的一些细节,尤其是粗体声明:

Spark actions are executed through a set of stages, separated by distributed “shuffle” operations. Spark automatically broadcasts the common data needed by tasks within each stage. The data broadcasted this way is cached in serialized form and deserialized before running each task. This means that explicitly creating broadcast variables is only useful when tasks across multiple stages need the same data or when caching the data in deserialized form is important.


  • 什么是“公共(public)数据”?
  • 如果变量仅在 1 个阶段使用,是否意味着广播它没有用,无论其内存占用如何?
  • 由于广播有效地“引用”了每个执行器上的变量而不是多次复制它,在什么情况下广播是一个坏主意?我的意思是为什么这种广播行为不是默认的 Spark 行为?

  • 谢谢!

    最佳答案

    您的问题几乎包含了您需要的所有答案。

    what is "common data"?



    被多个执行器引用/读取的数据。例如,字典查找。假设您有 100 个执行程序运行需要进行大量字典查找的任务。如果没有广播变量,您将在每个执行程序中加载这些数据。使用广播变量,您只需加载一次,所有执行程序将引用同一个字典。因此,您可以节省大量空间。

    更多详情: https://blog.knoldus.com/2016/04/30/broadcast-variables-in-spark-how-and-when-to-use-them/

    if the variable is only used in 1 stage, does it mean broadcasting it is not useful, regardless of its memory footprint?



    不和是。不,如果您的单个阶段有数百到数千个执行者!是的,如果你的舞台上只有很少的执行者。

    Since broadcast effectively "reference" the variable on each executor instead of copying it multiple times, in what scenario broadcasting is a BAD idea? I mean why this broadcasting behavior is not the default spark behavior?



    以这种方式广播的数据以序列化形式缓存并在运行每个任务之前反序列化。因此,如果正在广播的数据非常非常庞大,那么序列化和反序列化将成为代价高昂的操作。所以在这种情况下你应该避免使用广播变量。

    关于apache-spark - spark广播变量的缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41580725/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com