Apache spark UpdateStateByKey中的Spark Streaming变量在从检查点重新启动应用程序后未更改值
我目前正在Python中构建一个中等复杂的应用程序,它依赖于来自多个源的有状态数据。使用Apache spark UpdateStateByKey中的Spark Streaming变量在从检查点重新启动应用程序后未更改值,apache-spark,pyspark,spark-streaming,Apache Spark,Pyspark,Spark Streaming,我目前正在Python中构建一个中等复杂的应用程序,它依赖于来自多个源的有状态数据。使用Pyspark时,我遇到了一个问题,在应用程序从检查点重新启动后,updateStateByKey函数中使用的全局变量没有被分配。使用forEachRDD我有一个全局变量a,它在每次批处理运行时从文件中传播,然后a用于updateStateByKey。当我最初运行应用程序时,它按预期运行,并且在更新功能的范围内正确引用了A的值 但是,当我关闭应用程序并重新启动时,我会看到不同的行为。变量A由其相应的forEa
Pyspark
时,我遇到了一个问题,在应用程序从检查点重新启动后,updateStateByKey
函数中使用的全局变量没有被分配。使用forEachRDD
我有一个全局变量a
,它在每次批处理运行时从文件中传播,然后a
用于updateStateByKey
。当我最初运行应用程序时,它按预期运行,并且在更新功能的范围内正确引用了A
的值
但是,当我关闭应用程序并重新启动时,我会看到不同的行为。变量A
由其相应的forEachRDD
函数指定正确的值,但当执行updateStateByKey
函数时,将不使用A
的新值。它只是。。。消失了
我可能在实施这个错误,但我希望有人能给我指出正确的方向
下面是一些伪代码:
def readfile(rdd):
global A
A = readFromFile
def update(new, old)
if old in A:
do something
dstream.forEachRDD(readfile)
dstream.updateStateByKey(update)
ssc.checkpoint('checkpoint')
A
在第一次运行时是正确的,但是当应用程序被终止并重新启动时,A
似乎没有正确地重新分配。是A=readFromFile
的打字错误吗。我继续纠正了这一点。谢谢你抓住它。