我需要计算从kafka流中收到的许多参数的中位数,持续15分钟的时间窗口。
我找不到任何内置函数,但我找到了一种使用自定义WindowFunction的方法。
我的问题是:
感谢
答案 0 :(得分:0)
您的问题包含多个方面,但让我回答最基本的一个方面:
这对Flink来说是一项艰巨的任务,为什么这不是标准示例?
是的,中位数是一个很难的概念,因为确定中位数的唯一方法是保留完整数据。
许多统计信息都不需要计算完整的数据。例如:
这甚至可以使用更复杂的指标(例如标准差)来完成。
但是,没有确定中位数的捷径,添加新观测值后才知道中位数是什么的唯一方法是查看所有观测值,然后找出中间值是什么。
因此,这是一个具有挑战性的指标,需要处理传入的数据大小。如前所述,可能会有如下估算:https://issues.apache.org/jira/browse/FLINK-2147
或者,您可以查看数据的分布方式,并可以使用均值,偏度和峰度等指标估算中位数。
我可以想出的最后一个解决方案是,如果您需要大概知道该值是多少,请选择一些“候选对象”并计算其下的观测值的分数。那么最接近50%的那个就是合理的估算值。