使用PySpark检测StreamingContext是否空闲

时间:2016-02-25 16:01:37

标签: apache-spark pyspark spark-streaming

StreamingContext函数提供方法awaitTermination(timeout=None)awaitTerminationOrTimeout(timeout),它们都需要外部进程来停止上下文。

是否有任何机制可以应用于StreamingContext作业,允许在空闲一段时间后终止自身?我的意思是没有数据来自流媒体源的超时。

1 个答案:

答案 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()