2015-06-28 55 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())