Pyspark Multiple Kafka Stream覆盖变量

时间:2017-09-13 12:51:12

标签: apache-spark pyspark apache-kafka spark-streaming

我有一个pyspark程序可以接受配置中提到的多个Kafka流,如下所示:

[stream1]
server=10.0.0.1:9090
topic=log_topic

[stream2]
server=10.0.0.2:9090
topic=file_topic

所以我的代码使用上面提到的配置加载多个这样的流:

from configobj import ConfigObj
config = ConfigObj("my.conf")
for i, j in conf.iteritems():
    stream = KafkaUtils.createStream(ssc, j['server'], "consumer_%s" % (i), {j['topic']: 1}).cache()
    stream.pprint()

现在说说stream1是否有以下传入内容:

aaaaa
aaaaa
aaaaa
...

和stream2具有以下内容:

bbbbb
bbbbb
bbbbb
...

使用pprint函数,我希望看到以下输出:

-----------------------------
2017-09-13 16:54:32
-----------------------------
aaaaa
aaaaa
aaaaa
...

-----------------------------
2017-09-13 16:54:32
-----------------------------
bbbbb
bbbbb
bbbbb
...

但我看到以下输出:

-----------------------------
2017-09-13 16:54:32
-----------------------------
bbbbb
bbbbb
bbbbb
...

-----------------------------
2017-09-13 16:54:32
-----------------------------
bbbbb
bbbbb
bbbbb
...

据我所知,在for循环的第二次迭代之后读取变量stream之后,似乎存在延迟加载或某些内容。任何人都可以让我知道如何实现这一点,以便我可以在for循环中处理2个独立的流。

谢谢!

1 个答案:

答案 0 :(得分:0)

类似的东西:

streams = []
config = ConfigObj("my.conf")
for i, j in conf.iteritems():
    stream = KafkaUtils.createStream(ssc, j['server'], "consumer_%s" % (i), {j['topic']: 1}).cache()
    streams.append(stream)

all_topic = ssc.union(*streams)    
all_topic.pprint()