【问题标题】:PySpark Streaming example does not seem to terminatePySpark Streaming 示例似乎没有终止
【发布时间】:2015-08-13 18:26:29
【问题描述】:

我试图通过一个简单的例子来理解 Spark Streaming 的 Python API。

from pyspark.streaming import StreamingContext
dvc = [[-0.1, -0.1], [0.1, 0.1], [1.1, 1.1], [0.9, 0.9]]
dvc = [sc.parallelize(i, 1) for i in dvc]
ssc = StreamingContext(sc, 2.0)
input_stream = ssc.queueStream(dvc)

def get_output(rdd):
    print(rdd.collect())
input_stream.foreachRDD(get_output)
ssc.start()

这会打印所需的输出,但最后会打印很多空列表并且不会终止。谁能告诉我哪里出错了。

【问题讨论】:

    标签: python apache-spark spark-streaming pyspark


    【解决方案1】:

    在大多数情况下(除非您的代码中的条件终止)流应该是无限的。流式应用程序的目的是使用定期传入的数据。因此,在处理了前 4 个 RDD (i.e. [[-0.1, -0.1], [0.1, 0.1], [1.1, 1.1], [0.9, 0.9]]) 之后,队列中没有任何内容,而 spark 流建立在 queueStream 可能会出现新事物的概念上。

    如果您正在执行一次性 ETL,您可能会考虑放弃流式传输。

    【讨论】:

    • 我明白了,有没有办法手动停止 Streaming 应用程序,比如接收到 x 个 RDD 或 n 个数据量?
    • 您可以拨打ssc.stop()
    • 我试过了,但它立即停止,没有打印任何东西。
    • 我的意思是这样的https://gist.github.com/hiteshd/388733ff10e4d428059c
    • 您可以在流式作业self.streamingContext.awaitTerminationOrTimeout( timeout = self.run_time_minutes * 60 ) 上设置超时以运行一段时间然后停止。
    猜你喜欢
    • 2023-03-07
    • 2018-02-15
    • 1970-01-01
    • 2011-04-29
    • 2020-11-17
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多