我正在使用Apache Spark流来对我的Web服务API日志进行实时处理。源流只是一系列带有返回码的API调用。我的Spark应用主要是对原始API调用日志进行聚合,计算返回某些HTTP代码的API数量。
源流上的批处理间隔为1秒。然后我做:
inputStream.reduceByKey(_ + _) where inputStream is of type DStream[(String, Int)].
现在我得到了结果DStream level1
。然后我通过调用
reduceByKeyAndWindow
level1
val level2 = level1.reduceByKeyAndWindow((a: Int, b: Int) => a + b, Seconds(60), Seconds(60))
level 3
然后我想通过调用
在DStream level2
之上进行更长时间(例如3600秒)的进一步聚合(比如val level3 = level2.reduceByKeyAndWindow((a: Int, b: Int) => a + b, Seconds(3600), Seconds(3600))
)
level2
我现在的问题是:我只在level3
上获得汇总数据,而level3
为空。
我的理解是level 2
不应为空,而应汇总level3
流。
当然,我可以更改为让level1
汇总到level2
,而不是level2
。但我不明白为什么它不能通过汇总reduceByKeyAndWindow
来实现。
在我看来,您只能在源流上执行一层reduceByKeyAndWindow
。 1}}在按键和窗口缩小的前一个流之上的任何其他层都不起作用。
有什么想法吗?
答案 0 :(得分:1)
是的,我认为它应该是Spark Streaming中的一个错误。似乎窗口化流的Window操作不起作用。现在我也在调查原因。将不断更新任何调查结果。
类似的问题: indows of windowed streams not displaying the expected results