不完全确定这是否适合此论坛。
我有一个小型数据库集群(4个盒子),每台机器都有一个整体数据集的分片。
我需要为特定数据点计算四分位数,但我需要在不能同时访问整个数据集的情况下进行计算。
这甚至可能吗?
编辑我更喜欢确切的答案,但合理的近似可能也会有效。
答案 0 :(得分:1)
在这种情况下,您无法计算精确的四分位数,但QDigest算法可以解决您的问题。你可以获得相当不错的近似值。你可以检查一次,这里有Java实现:https://github.com/addthis/stream-lib/blob/master/src/main/java/com/clearspring/analytics/stream/quantile/QDigest.java。
通过这种方式,您可以在每个群集中创建QDigest数据结构。它的超级压缩数据结构,将维护数据集的四分位数汇总。此外,您可以执行这些数据结构的并集,从而解决您的问题。
因此,在每个集群中创建一个QDigest实例,并结合结果,只需为每个集群执行这些实例的并集,这将为您提供相当好的四分位近似值。
您可以按照QDigest的论文了解详细信息。
答案 1 :(得分:0)
我猜它可能不可能,因为你说数据库很小。如果它是一个大型数据集,并且每个集群包含1/4代表性样本,那么我猜您可以将特定数据点与一个集群上保存的数据进行比较。
数据集的每个分片的统计信息之间是否存在很大差异?