我试图通过一个简单的例子来理解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()
这会输出所需的输出,但最后会打印很多空列表而不会终止。有人能告诉我哪里可能出错了。
答案 0 :(得分:3)
大多数情况下的流式传输(除非代码中的条件终止)应该是无限的。流应用程序的目的是消耗定期进入的数据。因此,在处理完前4个RDD (i.e. [[-0.1, -0.1], [0.1, 0.1], [1.1, 1.1], [0.9, 0.9]])
之后,队列中没有任何内容,而火花串流建立在可能会出现新内容的概念queueStream
如果您正在进行一次性ETL,您可能会考虑丢弃流式传输。