如何在火花流中加入两个Dstream

时间:2017-07-14 03:26:28

标签: apache-spark spark-streaming

有一个系统同时为两个kafka主题生成数据。

例如:
步骤1:系统创建一个数据,例如(id=1, main=A, detail=a, ...)

第2步:将数据分成两部分,例如(id=1, main=A ...)(id=1, detail=a, ...)

第3步:将发送至 topic1 ,另一个将发送至 topic2

所以我想使用spark streaming结合两个主题的数据:

data_main = KafkaUtils.createStream(ssc, zkQuorum='', groupId='', topics='topic1')
data_detail = KafkaUtils.createStream(ssc, zkQuorum='', groupId='', topics='topic2')

result = data_main.transformWith(lambda x, y: x.join(y), data_detail)
# outout:
# (id=1, main=A, detail=a, ...)

但请考虑一下这种情况:

(id=1, main=A ...)可能在data_main的批处理1中,而(id=1, detail=a, ...)可能在data_detail的批处理2中。 它们非常接近,但不是在同一批次中。

如何处理此案?非常感谢任何建议

1 个答案:

答案 0 :(得分:0)

你试过开窗吗? 因为窗口化将有助于回顾并查看其他批处理间隔中的数据。

窗口化允许您在滑动数据窗口上应用转换。

每次窗口在源DStream上滑动时,窗口内的源RDD被组合并操作以产生窗口化DStream的RDD。所以基本上你可以组合来自多个批处理间隔的数据