我有一个带有9000个唯一id的数据帧df。
像
| id |
1
2
我想生成一个随机样本,替换这9000个ID 100000次。如何在pyspark 中进行
我试过
df.sample(True,0.5,100)
但我不知道如何获得100000个数字的准确
好吧,首先要做的是。你可能无法在你的(超过)样本中准确地得到100000。原因是为了高效采样,Spark使用了一种名为Bernouilli采样的方法。基本上,这意味着它会遍历RDD,并为每一行分配被包含的概率。因此,如果你想要10%的样本,每一行都有10%的机会被包括在内,但如果它与你想要的数字完全相加,则没有考虑在内,但对于大型数据集,它往往非常接近。
代码如下所示:df.sample(True, 11.11111, 100)
。这将获取等于原始数据集大小的11.11111倍的数据集样本。由于11.911111*9000~=100000,您将获得大约100000行。
如果你想要一个精确的样本,你必须使用df.takeSample(True, 100000)
。然而,这不是一个分布式数据集。此代码将返回一个数组(一个非常大的数组)。如果它可以在主内存中创建,那么就这样做。但是,由于您需要正确数量的ID,我不知道如何以分布式方式实现这一点。