详细内容或原文请订阅后点击阅览
使用指数变量进行并行采样
如何将看似迭代的无替换加权采样过程转化为高度可并行的过程?事实证明,一种基于指数变量的著名技术正是实现这一点的。
来源:RStudio AI博客作为我们最近在 sparklyr 中支持 Spark 数据帧加权采样工作的一部分,我们开始寻找可以在分布式集群计算框架(如 Apache Spark)中以高效和可扩展的方式执行加权采样(尤其是无放回采样)的算法。
sparklyr
为简洁起见,“无放回加权采样”将在本博文的其余部分缩写为 SWoR。
SWoR在以下部分中,我们将解释和说明 SWoR 在概率方面的含义,简要概述我们考虑过但并不完全满意的一些替代解决方案,然后深入研究指数变量,这是一个简单的数学结构,它使这个问题的理想解决方案成为可能。
SWoR如果您迫不及待地想要开始行动,还有一个部分,其中我们展示了 sparklyr 中 sdf_weighted_sample() 的示例用法。此外,您可以在此拉取请求中查看 sparklyr::sdf_weighted_sample() 的实现细节。
部分sdf_weighted_sample()
sparklyr
sparklyr::sdf_weighted_sample()
拉取请求
一切如何开始
我们的旅程始于 Github 问题,询问在 sparklyr 中支持 Spark 数据框的 dplyr::sample_frac(..., weight = ) 等效项的可能性。例如,
Github 问题dplyr::sample_frac(..., weight = )
sparklyr
dplyr::sample_frac(mtcars, 0.25, weight = gear, replace = FALSE)
dplyr::sample_frac(mtcars, 0.25, weight = gear, replace = FALSE)
dplyr::sample_frac(mtcars, 0.25, weight = gear, replace = FALSE)
dplyr
::
sample_frac
sample_frac
(
mtcars
0.25
=
gear
=
FALSE
)
mtcars$gear
dplyr::sample_frac
Spark SQL内置函数
sparklyr
SW到底是什么oR
SWoR SWoR \(w_1, \dotsc, w_N\) SWoR \(N\) \(r_1, \dotsc, r_N\) \(w_1, \dotsc, w_N\) \(n\) SWoR \((r_1, \dotsc, r_n)\) \(\prod\limits_{j = 1}^{n} \left( {w_j} \middle/ {\sum\limits_{k = j}^{N}{w_k}} \right) \)SWOR
\(n\)
\((n - j + 1)\)
\(j\)
\(j \in \{1, \dotsc, n\}\)
SWoR
。
,
,