让我们说我们有一个每5秒运行一次的火花流工作。这里我们有一个foreachRDD语句,我们在其中广播一个变量。问题是每个RDD每次都会广播广播变量,即使它没有改变吗?
第二个基于某些条件说1小时后,如果我使用unpersist()更新这个广播变量(意思是参考数据结构,BC变量指向)然后重新广播这个BC变量,那么这也将是braodcasted只有一次对所有工人或多次,即每次foreachRDD循环一次?
答案 0 :(得分:1)
如果您在foreachRDD
电话中创建广播变量:
stream.foreachRDD(rdd => {
val broadcast = ???
...
})
为每个批次创建并传输此变量。包装变量是否改变无关紧要。
您还应该记住,在Spark Streaming(cannot be recovered from checkpoint)中使用时,广播变量并不完全可靠,并且通常不应修改广播变量。