我已经开始研究Scala Spark代码库,其中可以广播的所有内容似乎都是小对象(一些小的String属性)
例如,我看到了很多:
val csvParser: CSVParser = new CSVParser(someComputedValue())
val csvParserBc = sc.broadcast(csvParser)
someFunction(..., csvParserBc)
我的问题有两个:
我的印象是,在那种情况下,广播没有用,甚至可能是浪费,但我想要一个更开明的意见。
答案 0 :(得分:3)
当您播放某些内容时,会将其复制到每个执行程序一次。如果您不进行广播,则会将其与每项任务一起复制。因此,如果您拥有一个大型对象和/或比执行程序更多的任务,则广播非常有用。
根据我的经验,这种情况很少发生。广播使代码复杂化。因此,我总是在没有广播的情况下开始,只有在我发现这是良好性能所需的时候才添加广播。