2016-08-18 46 views
0

我有一个kafka流进入一些输入主题。 这是我为接受kafka流写的代码。如何结合两个DStreams(pyspark)?

conf = SparkConf().setAppName(appname) 
sc = SparkContext(conf=conf) 
ssc = StreamingContext(sc) 
kvs = KafkaUtils.createDirectStream(ssc, topics,\ 
      {"metadata.broker.list": brokers}) 

然后我创建了两个DStreams的键和值的原始流。

keys = kvs.map(lambda x: x[0].split(" ")) 
values = kvs.map(lambda x: x[1].split(" ")) 

然后我在值DStream中执行一些计算。 例如,

val = values.flatMap(lambda x: x*2) 

现在,我需要钥匙和VAL DSTREAM相结合,在卡夫卡流的形式返回结果。

如何将val与corressponding键结合?

回答

0

您可以使用2个DStream中的join运算符来合并它们。 当你做地图时,你基本上正在创建另一个流。所以,加入会帮助你将它们合并在一起。

如:

Joined_Stream = keys.join(values).(any operation like map, flatmap...) 
+0

我没有得到这部分'(如地图的任何操作,flatmap ...)',你能更详细说明。 – vidhan

+0

我不明白你想要做的事情(我提供了合并2个DStreams的通用答案)。 的事情是,如果你做的值的平面地图,没有办法将他们映射回键,因为这将是一个扁平列表的输出.... 通过合并2个Dstreams,你可以创建RDD的每个元素这两个键和值,只是不会有一对一映射... –