当没有新的此类数据用于当前的Microbatch时,SPARK从之前的Microbatch中蒸出updateStateByKey值

时间:2016-12-15 18:49:56

标签: spark-streaming

我不清楚我是否想要通过简单计数来显示所有Microbat上的N个最新事件,以及是否可以使用标准Spark Streaming进行UNIONing或以适当的方式加入!使用保存/持久的数据集,考虑到当前处理可能没有处理前5位的密钥。

即。如果初始Microbatch的当前处理的前5个是x,y,z,a,b和,那么如果,例如,如果下一个Microbatch只有x,c,m作为数据,我可以检索a,b和y以及z作为前5的一部分,如果c和m在前5个方面的出现次数少于这些先验?

可能是一个糟糕的用例。

2 个答案:

答案 0 :(得分:1)

rdd1 = sc.parallelize(list('abcd')).map(lambda x: (x, 110 - ord(x)))
rdd2 = sc.parallelize(list('cdef')).map(lambda x: (x, 2))

rddQueue = ssc.queueStream([rdd1, rdd2])


def func(new_values, old_value):
    return sum(new_values) + (old_value or 0)


rddQueue = rddQueue.updateStateByKey(func).transform(lambda x: x.sortBy(lambda y: y[1], ascending=False))

rddQueue.pprint()

输出:

-------------------------------------------                                     
Time: 2016-12-16 11:06:54
-------------------------------------------
('a', 13)
('b', 12)
('c', 11)
('d', 10)

-------------------------------------------                                     
Time: 2016-12-16 11:06:57
-------------------------------------------
('a', 13)
('c', 13)
('b', 12)
('d', 12)
('f', 2)
('e', 2)

'检索'意味着什么?

答案 1 :(得分:0)

使用reduceByKeyAndWindow。除了它不是万无一失。除非对数据存储区进行持久化,否则滑动窗口可能会在延伸时间长于滑动窗口的时间段内丢失前N个。 也许不是。