我有一个包含潜在损坏/恶意数据的数据集。数据带有时间戳。我用启发式函数对数据进行评级。经过一段时间后,我知道所有带有一些ID的新数据项都需要被丢弃,它们代表了很大一部分数据(高达40%)。
现在我有两个批处理管道:
我想从批处理模式(例如,每天运行)切换到在线处理模式(希望延迟<10分钟)。
第二个管道使用全局窗口,使处理变得容易。当检测到损坏的数据密钥时,简单地丢弃所有其他记录(也使用前几天丢弃的密钥,因为预过滤器很容易)。此外,在处理给定密钥的所有历史数据时,它可以更容易地对输出数据做出决策。
主要问题是:我可以在Dataflow DAG中创建循环吗?假设我想累积给我处理的每个会话窗口的质量率,如果速率总和超过X,那么管道早期阶段的一些过滤函数应该过滤掉恶意密钥。
我知道侧输入,我不知道它是否可以在运行时更改。
我知道DAG根据定义不能有循环,但如果没有它会如何实现相同的结果呢?
我想到的想法是使用侧输出将ID标记为恶意,并伪造无限的输出/输入。输出会将数据转储到某个存储器,输入会每小时加载一次并流式传输,以便加入。
答案 0 :(得分:1)
Beam编程模型中的侧输入are windowed。
所以你走的是正确的道路:将管道结构化为两部分似乎是合理的:1)计算恶意数据的检测模型,2)将模型作为侧输入,数据作为主要输入,并根据模型过滤数据。管道的第二部分将获得匹配窗口的模型,这似乎正是您想要的。
事实上,这是Millwheel paper(第2页)中的主要示例之一,Dataflow的流媒体播放器基于此示例。