如何使用相同的密钥组合一个DStream密钥和值对?
我想改变第一个DStream成为第二个使用spark。但我不知道该怎么做?我已经尝试了groupByKey(),它没有工作,aggregateByKey()只使用RDD而不是DStream。如何使用相同的密钥组合一个DStream密钥和值对?
这是当前结果:
DStream [(1,value1),(2,value2),(3,value3),(1,value4),(1,value5),(2,value6)]
这是结果,我想:
DStream(1,(value1,value4,value5)) ,(2,(value2,value5)) ,(3,(value3))
感谢您的答复。
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
),但您不希望将其用于增长集合。
感谢您的解释。使用groupByKey不允许我组合相同的密钥对,因为它是一个流,并使用多个RDD /增长集合。你提出了什么解决方案来达到上述结果?谢谢 – peter
我不清楚你想达到什么目的。我的意思是说,不断增长的价值观只会迟早打击记忆。如果你想保持一切都坚持下去(也许在需要的时候阅读)。如果你看更宽的间隔尝试窗口操作。 – zero323
我不确定spark数据流可以处理什么数据量以及何时用数据库分析替换流。这里是我更详细的问题:http://stackoverflow.com/questions/35691172/whats-the-limit-to-spark-streaming-in-terms-of-data-amount。感谢您的回复和帮助! – peter
你是什么意思'groupByKey' _didn't work_? – zero323
使用与groupByKey相同的键在组合它们时不会给我相同的键和值对。这意味着它不会给我这个结果:DStream(1,(value1,value4,value5)),(2,(value2,value5)),(3,(value3))。我不知道如何做到这一点,也许我使用groupByKey错误? – peter