火花流 - 在foreachrdd中是广播变量一直广播

时间:2016-10-04 19:48:23

标签: apache-spark streaming

让我们说我们有一个每5秒运行一次的火花流工作。这里我们有一个foreachRDD语句,我们在其中广播一个变量。问题是每个RDD每次都会广播广播变量,即使它没有改变吗?

第二个基于某些条件说1小时后,如果我使用unpersist()更新这个广播变量(意思是参考数据结构,BC变量指向)然后重新广播这个BC变量,那么这也将是braodcasted只有一次对所有工人或多次,即每次foreachRDD循环一次?

1 个答案:

答案 0 :(得分:1)

如果您在foreachRDD电话中创建广播变量:

stream.foreachRDD(rdd => {
  val broadcast = ???
  ...
})

为每个批次创建并传输此变量。包装变量是否改变无关紧要。

您还应该记住,在Spark Streaming(cannot be recovered from checkpoint)中使用时,广播变量并不完全可靠,并且通常不应修改广播变量。