2016-02-26 124 views
1

我想改變第一個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)) 

感謝您的答覆。

+1

你是什麼意思'groupByKey' _didn't work_? – zero323

+0

使用與groupByKey相同的鍵在組合它們時不會給我相同的鍵和值對。這意味着它不會給我這個結果:DStream(1,(value1,value4,value5)),(2,(value2,value5)),(3,(value3))。我不知道如何做到這一點,也許我使用groupByKey錯誤? – peter

回答

2

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),但您不希望將其用於增長集合。

+0

感謝您的解釋。使用groupByKey不允許我組合相同的密鑰對,因爲它是一個流,並使用多個RDD /增長集合。你提出了什麼解決方案來達到上述結果?謝謝 – peter

+1

我不清楚你想達到什麼目的。我的意思是說,不斷增長的價值觀只會遲早打擊記憶。如果你想保持一切都堅持下去(也許在需要的時候閱讀)。如果你看更寬的間隔嘗試窗口操作。 – zero323

+0

我不確定spark數據流可以處理什麼數據量以及何時用數據庫分析替換流。這裏是我更詳細的問題:http://stackoverflow.com/questions/35691172/whats-the-limit-to-spark-streaming-in-terms-of-data-amount。感謝您的回覆和幫助! – peter

相關問題