使用 Apache Spark 分布中位数和分位数
对于使用 IPython 和 Spark 对大整数 RDD 进行分布式中值计算,合适的方法是排序RDD,然后访问中间元素。要对 RDD 进行排序,请使用 sortBy() 方法。要找到中位数,请执行以下步骤:
对于分位数,您可以使用 Spark 2.0 中引入的 approxQuantile() 方法或使用 Greenwald-Khanna 算法创建自定义代码。这些函数使用指定的相对误差计算分位数。
自定义分位数计算:这是用于分位数估计的自定义 PySpark 函数:
<code class="python">def quantile(rdd, p, sample=None, seed=None): # ... (function implementation as provided in the original question)</code>
精确分位数计算(Spark
如果准确性至关重要,请考虑使用 NumPy 在本地收集和计算分位数。这种方法通常更有效并且避免了分布式计算。但是,内存要求可能会很高。
Hive UDAF 分位数:
将 HiveContext 与整数或连续值一起使用时,Hive UDAF 提供了另一种分位数估计选项。可以通过针对 DataFrame 的 SQL 查询来访问这些函数:
<code class="sql">sqlContext.sql("SELECT percentile_approx(x, 0.5) FROM df")</code>
以上是如何使用 Apache Spark 有效计算大型数据集的中位数和分位数?的详细内容。更多信息请关注PHP中文网其他相关文章!