简单随机采样和数据帧 SAMPLE 函数如何在 Apache Spark (Scala) 中工作?

Yog*_*esh 5 scala dataframe apache-spark apache-spark-sql pyspark

Q1. 我试图使用带有参数 withReplacement: false,fraction: 0.6 的示例函数从 Spark 数据帧(13 行)中获取一个简单的随机样本,但每次运行它时它都会给我不同大小的样本,尽管它在以下情况下工作正常我设置了第三个参数(种子)。为什么这样?

Q2。随机数生成后样本是如何获得的?

提前致谢

zer*_*323 4

随机数生成后样本是如何获得的?

根据您想要采样的分数,有两种不同的算法。您可以检查Justin对 SPARK 的 Pihony 回答Is Sample method on Dataframes Uniform Samples?

每次运行它时它都会给我不同大小的样本,尽管当我设置第三个参数(种子)时它工作得很好。为什么这样?

如果分数高于采样,则通过简单的过滤器RandomSampler.defaultMaxGapSamplingFraction完成:

items.filter { _ => rng.nextDouble() <= fraction }
Run Code Online (Sandbox Code Playgroud)

否则,稍微简化一下,它会drop使用随机整数重复调用方法并获取下一项。

记住这一点,很明显,假设 , 等于GapSamplingIteratorfraction * rdd.count 没有任何问题,则返回的元素数量将是随机的且具有均值。如果设置种子,您将获得相同的随机数序列,因此样本中包含相同的元素。