UpdateStateByKey中的Spark Streaming变量在从检查点重新启动应用程序后未更改值

时间:2016-06-09 22:42:05

标签: apache-spark pyspark spark-streaming

我目前正在使用Python构建一个中等复杂的应用程序,该应用程序依赖于来自多个源的有状态数据。使用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似乎没有被正确地重新分配。

0 个答案:

没有答案