首页 文章

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

提问于
浏览 114
2

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

Q2 . 随机数生成后如何获得样本?

提前致谢

2 回答

  • 1

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

    根据您要采样的分数,有两种不同的算法 . 你可以查看Justin's Pihony回答SPARK Is sample method on Dataframes uniform sampling?

    它每次运行时都会给我不同大小的样本,但是当我设置第三个参数(种子)时它可以正常工作 . 为什么这样?

    如果分数高于 RandomSampler.defaultMaxGapSamplingFraction ,采样由a simple filter完成:

    items.filter { _ => rng.nextDouble() <= fraction }
    

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

    记住这一点很明显,假设 GapSamplingIterator 没有任何错误,等于fraction * rdd.count,一些返回的元素将是随机的均值 . 如果设置种子,则会得到相同的随机数序列,因此样本中包含相同的元素 .

  • 0

    RDD API包含 takeSample ,它将返回"sample of specified size in an array" . 它通过调用 sample 直到它获得大于请求的样本大小,然后从中随机获取指定的数字 . 该代码表示,由于偏向于大样本量,因此不应经常迭代 .

相关问题