广播是否过度杀伤?

时间:2015-04-15 13:40:25

标签: apache-spark

我已经开始研究Scala Spark代码库,其中可以广播的所有内容似乎都是小对象(一些小的String属性)

例如,我看到了很多:

val csvParser: CSVParser = new CSVParser(someComputedValue())
val csvParserBc = sc.broadcast(csvParser)
someFunction(..., csvParserBc)

我的问题有两个:

  • 当一个小对象在几个闭包中重用时,广​​播是否有用?
  • 当一次使用一个小物体时广播是否有用?

我的印象是,在那种情况下,广播没有用,甚至可能是浪费,但我想要一个更开明的意见。

1 个答案:

答案 0 :(得分:3)

当您播放某些内容时,会将其复制到每个执行程序一次。如果您不进行广播,则会将其与每项任务一起复制。因此,如果您拥有一个大型对象和/或比执行程序更多的任务,则广播非常有用。

根据我的经验,这种情况很少发生。广播使代码复杂化。因此,我总是在没有广播的情况下开始,只有在我发现这是良好性能所需的时候才添加广播。