代码之家  ›  专栏  ›  技术社区  ›  Ryan O'Neill

计算分布式数据的四分位数

  •  1
  • Ryan O'Neill  · 技术社区  · 12 年前

    不完全确定这是否是一个合适的论坛。

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

    我需要计算特定数据点的四分位数,但我需要在不同时访问整个数据集的情况下进行计算。

    这可能吗?

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

    2 回复  |  直到 12 年前
        1
  •  1
  •   bistaumanga    11 年前

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

    这样,您就可以在每个集群中创建QDigest数据结构。其超级压缩的数据结构,将维护数据集的四分位数摘要。此外,您可以执行这些数据结构的并集,从而解决您的问题。

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

    您可以按照QDigest的论文了解详细信息。

        2
  •  0
  •   James    12 年前

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

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