我不清楚我是否想要通过简单计数来显示所有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个方面的出现次数少于这些先验?
可能是一个糟糕的用例。
答案 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个。 也许不是。