计算分布数据的四分位数



我不确定这是不是一个合适的论坛。

我有一个小的数据库集群(4个盒子),每台机器有一个整体数据集的分片。

我需要计算特定数据点的四分位数,但我需要在没有访问整个数据集的情况下完成。

这可能吗?

编辑我更喜欢确切的答案,但一个合理的近似值可能也会工作。

在这种情况下,您无法计算精确的四分位数,但是QDigest算法可以解决您的问题。你可以得到近似值,这是相当好的。您可以检查一次,Java实现在这里可用:https://github.com/addthis/stream-lib/blob/master/src/main/java/com/clearspring/analytics/stream/quantile/QDigest.java.

这样,您就可以在每个集群上创建QDigest数据结构。它的超压缩数据结构,将保持数据集的四分位数汇总。此外,您可以执行这些数据结构的并集,这就解决了您的问题。

因此,在每个集群上创建一个QDigest实例,并将结果组合起来,只需对每个集群执行这些实例的并集,这将为您提供相当好的四分位数近似值。

详细内容可参考QDigest的文章。

我猜这可能是不可能的,因为您说数据库很小。如果这是一个大数据集,每个集群包含1/4代表性样本,那么我想你可以将特定数据点与一个集群上的数据进行比较。

数据集的每个分片的统计数据之间是否存在很大的差异?

最新更新