Q1 . 我试图使用带有参数withReplacement的示例函数从一个Spark数据帧(13行)中获取一个简单的随机样本:false,分数:0.6但它每次运行时都会给我不同大小的样本,尽管它可以正常工作我设置了第三个参数(种子) . 为什么这样?
Q2 . 随机数生成后如何获得样本?
提前致谢
随机数生成后如何获得样本?
根据您要采样的分数,有两种不同的算法 . 你可以查看Justin's Pihony回答SPARK Is sample method on Dataframes uniform sampling?
它每次运行时都会给我不同大小的样本,但是当我设置第三个参数(种子)时它可以正常工作 . 为什么这样?
如果分数高于 RandomSampler.defaultMaxGapSamplingFraction ,采样由a simple filter完成:
RandomSampler.defaultMaxGapSamplingFraction
items.filter { _ => rng.nextDouble() <= fraction }
否则,稍微简化一下,它会使用随机整数重复调用 drop 方法,并采用下一项 .
drop
记住这一点很明显,假设 GapSamplingIterator 没有任何错误,等于fraction * rdd.count,一些返回的元素将是随机的均值 . 如果设置种子,则会得到相同的随机数序列,因此样本中包含相同的元素 .
GapSamplingIterator
RDD API包含 takeSample ,它将返回"sample of specified size in an array" . 它通过调用 sample 直到它获得大于请求的样本大小,然后从中随机获取指定的数字 . 该代码表示,由于偏向于大样本量,因此不应经常迭代 .
takeSample
sample
2 回答
根据您要采样的分数,有两种不同的算法 . 你可以查看Justin's Pihony回答SPARK Is sample method on Dataframes uniform sampling?
如果分数高于
RandomSampler.defaultMaxGapSamplingFraction
,采样由a simple filter完成:否则,稍微简化一下,它会使用随机整数重复调用
drop
方法,并采用下一项 .记住这一点很明显,假设
GapSamplingIterator
没有任何错误,等于fraction * rdd.count,一些返回的元素将是随机的均值 . 如果设置种子,则会得到相同的随机数序列,因此样本中包含相同的元素 .RDD API包含
takeSample
,它将返回"sample of specified size in an array" . 它通过调用sample
直到它获得大于请求的样本大小,然后从中随机获取指定的数字 . 该代码表示,由于偏向于大样本量,因此不应经常迭代 .