首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Spark RDD中获得具有确切样本大小的样本?

如何在Spark RDD中获得具有确切样本大小的样本?
EN

Stack Overflow用户
提问于 2015-09-29 14:55:03
回答 2查看 35.3K关注 0票数 22

为什么Spark RDD上的rdd.sample()函数返回不同数量的元素,即使分数参数是相同的?例如,如果我的代码如下所示:

每次我运行代码的第二行时,它都会返回一个不等于1000的不同数字。实际上,我希望每次都能看到1000个元素,尽管这1000个元素可能会有所不同。谁能告诉我怎样才能得到样本量恰好等于1000的样品?非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-29 15:15:25

如果你想要一个确切的样本,试着这样做

但请注意,这将返回一个数组,而不是RDD

至于为什么a.sample(false,0.1)没有返回相同的样本大小:这是因为spark内部使用了一种称为伯努利采样的方法来获取样本。RDD参数并不表示fraction实际大小的分数。它表示总体中的每个元素被选为样本的概率,正如维基百科所说:

由于样本中的每个总体元素都是单独考虑的,因此样本大小不是固定的,而是遵循二项分布。

这本质上意味着这个数字不会保持不变。

如果将第一个参数设置为true,那么它将使用泊松采样,这也会导致不确定的结果样本大小。

更新

如果您想坚持使用sample方法,您可以为fraction参数指定更大的概率,然后调用take,如下所示:

大多数情况下,这应该会导致样本大小为1000,但不一定总是如此。如果你有足够多的人口,这是可行的。

票数 43
EN

Stack Overflow用户

发布于 2016-11-01 19:19:32

另一种方法是先进行takeSample,然后进行RDD。对于大型数据集,这可能会很慢。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32837530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档