2015-06-28 47 views
1

如何通過窗口廣播計算出的dstream?例如,在最後10分鐘,我發現行的子集滿足一個條件(稱之爲send_events dstream)。我需要使用send_events dstream在最近10分鐘內找到滿足另一個條件的一組行(稱爲ack_events_for_send_events dstream)。由於大型洗牌,我不想分組。當我使用groupbykey時,每個組的大小非常小,至多爲10個。換句話說,我有很多組(我不確定這是否有助於優化我的操作,只是想分享。)火花傳輸中的廣播

例如:

id1, type1, time1 
id1, type2, time3 
id2, type1, time5 
id1, type1, time2 
id2, type2, time4 
id1, type2, time6 

我想找到每個id的type1和type2之間的最小時間差。每個ID最多有10行,但我在給定的窗口中有10,000個ID

+0

採取https://spark.apache.org/docs/latest/programming-guide.html#廣播變量),這很容易。無論如何,從你的描述我不知道什麼是你的問題的正確的解決方案。如果您想要更有效和具體的答案,請發佈您已有的代碼。 – lrnzcig

+0

我已經多次閱讀文檔。在火花之內,這很容易理解。我可以收集RDD然後播放它,我的主要問題是播放一系列RDD的DStream。它應該很簡單,但DStreams沒有收集功能。有一個foreachRDD函數可能會有所幫助,但我無法弄清楚如何使用它來收集DStream中的所有數據。感謝您的評論btw。 –

回答

0

也許下面的工作?

yourDStream.foreachRDD(somefunc) 

然後在somefunc:外觀上對廣播變量[這裏]的文檔(

def somefunc(rdd): 
    broadcastedList=sc.broadcast(rdd.collect())