一、概念
在Flink中,TopN计算是指从数据流中选取前N个元素,通常根据某个指标进行排序。TopN计算可以在全局范围内进行,也可以在窗口内进行。窗口TopN计算是指在特定的时间窗口或计数窗口内进行TopN计算。这些操作在实时数据分析、监控和推荐系统中非常常见。
二、案例
2.1 topN
魔法部在英国各地追踪巫师施展的每一个法术,并想知道每个巫师最喜欢的两个法术。 Flink SQL可用于计算连续聚合值,因此如果我们知道巫师施展的每个法术,就可以计算出他们施展该法术的总次数,此结果可用在OVER窗口上以计算Top-N
。先对上一步计算的结果按wizard
列进行分区,然后再根据施法次数(times_cast DESC
)降序排序。最后只保留row_num <= 2的行,从而找到每个巫师最喜欢的2个法术。
代码:
CREATE TEMPORARY TABLE spells_cast (
wizard STRING,
spell STRING
) WITH (
'connector' = 'faker',
'fields.wizard.expression' = '#{harry_potter.characters}',
'fields.spell.expression' = '#{harry_potter.spells}'
);
-- 找出每个巫师最喜欢的两个法术
SELECT wizard, spell, times_cast
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY wi