【问题标题】:Broadcasting in spark streaming在火花流中广播
【发布时间】:2015-06-28 01:33:39
【问题描述】:

如何广播通过窗口计算的 dstream?例如,在最后 10 分钟内,我找到满足条件的行子集(称为 send_events dstream)。我需要在过去 10 分钟内使用 send_events dstream 找到一组满足另一个条件的行(称为 ack_events_for_send_events dstream)。由于大洗牌,我不想 groupbykey 。当我做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

【问题讨论】:

  • 看看关于广播变量的文档here,这很容易。无论如何,根据您的描述,我不确定您的问题的正确解决方案是什么。如果您想要更有效和具体的答案,请发布您已有的代码。
  • 我实际上已经阅读了好几遍文档。在火花中,很容易理解。我可以收集 RDD 然后广播它,我的主要问题是广播 DStream,它是一系列 RDD。它应该很简单,但 DStreams 没有收集功能。有一个 foreachRDD 函数可能会有所帮助,但我不知道如何使用它来收集 DStream 中的所有数据。顺便说一句,感谢您的评论。

标签: apache-spark streaming broadcast


【解决方案1】:

也许以下方法可行?

yourDStream.foreachRDD(somefunc)

然后在一些函数中:

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

【讨论】:

    猜你喜欢
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2018-08-09
    相关资源
    最近更新 更多