StreamingContext函数提供方法awaitTermination(timeout=None)
和awaitTerminationOrTimeout(timeout)
,它们都需要外部进程来停止上下文。
是否有任何机制可以应用于StreamingContext作业,允许在空闲一段时间后终止自身?我的意思是没有数据来自流媒体源的超时。
答案 0 :(得分:1)
您可以跟踪状态并在满足特定条件时执行ssc.stop()
,但这不是一个非常好的解决方案:
from pyspark.streaming import StreamingContext
def counter(ssc, n=10):
cnt = {"cnt": 0}
def _counter(rdd):
if rdd.isEmpty():
cnt["cnt"] += 1
else:
cnt["cnt"] = 0
if cnt["cnt"] >= n:
ssc.stop()
return _counter
ssc = StreamingContext(sc, 1)
cnt = counter(ssc, 5)
stream = ... # Some DStream
stream.foreachRDD(cnt)
ssc.start()
ssc.awaitTermination()