有一个系统同时为两个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中。
它们非常接近,但不是在同一批次中。
如何处理此案?非常感谢任何建议
答案 0 :(得分:0)
你试过开窗吗? 因为窗口化将有助于回顾并查看其他批处理间隔中的数据。
窗口化允许您在滑动数据窗口上应用转换。
每次窗口在源DStream上滑动时,窗口内的源RDD被组合并操作以产生窗口化DStream的RDD。所以基本上你可以组合来自多个批处理间隔的数据