如何使用相同的键组合DStream键和值?

时间:2016-02-26 09:13:48

标签: apache-spark spark-streaming datastax-enterprise

我想将第一个DStream改为使用spark的第二个。但我不知道该怎么做?我已经尝试了groupByKey(),它没有工作和aggregateByKey(),它只使用RDD而不是DStream。

这是目前的结果:

DStream [(1,value1),(2,value2),(3,value3),(1,value4),(1,value5),(2,value6)]

这是我想要的结果:

DStream(1,(value1,value4,value5)) ,(2,(value2,value5)) ,(3,(value3))

感谢您的回复。

1 个答案:

答案 0 :(得分:3)

groupByKey就是这样做的。它会将DStream[K, V]转换为DStream[(K, Seq[V])]。我怀疑你对输出的期望可能是错误的。由于DStream只是RDDs组的无限序列,因此单独应用于每个RDD。因此,如果第一批包含:

(1,value1),(2,value2),(3,value3),(1,value4)

和第二个

(1,value5),(2,value6)

你会得到

(1, [value1, value4]), (2, [value2]), (3, value3)

(1,[value5]),(2,[value6])

分别。

虽然DStreams支持有状态操作(updateStateByKey),但您不太可能希望在增长的集合中使用它。