在窗口触发/触发中删除重复项

时间:2016-07-06 22:21:06

标签: google-cloud-dataflow

假设我有一个由userid键入的无限的句子集合,并且我想要一个不断更新的值来判断用户是否烦人,我们可以通过将他们曾经说过的所有句子传递给用户来计算是否烦人功能isAnnoying()。永远。

我将窗口设置为全局,并触发afterElement(1),accumulatingFiredPanes(),执行GroupByKey,然后使用ParDo发出userid,isAnnoying

这是永远有效的,不断累积每个用户的状态等。除非结果显示大多数时间新的句子不会改变用户是否是恼人的,因此大多数时候窗口会触发并发出用户标识,isAnnoying元组它是一个冗余更新,而io是不必要的。我如何捕获这些重复更新并在每次更改isAnnoying值时仍然获得更新的同时删除?

1 个答案:

答案 0 :(得分:1)

今天没有办法直接表达"仅在合并结果发生变化时才输出"。

您可以应用一种方法来减少数据量,具体取决于您的管道:使用 `$(function() { $('.left-element').hide(); });` `$(document).ready(function(){ $('#left-elemnt').hide(); });` ,然后使用立即过滤器跟随.discardingFiredPanes(),该过滤器会删除任何零值,其中&# 34;零"表示GroupByKey的标识元素。我使用CombineFn的关联性要求意味着您必须能够独立计算增量"恼人的"没有参考历史的句子。

当实现BEAM-23Combine的跨包变异的每个键和窗口状态)时,您将能够手动维护状态并实现这种类型的"仅在结果发生变化时发送输出"逻辑自己。

但是,我认为这种情况可能值得在模型中进行明确考虑。它融合了triggersaccumulation mode今天所体现的概念。