Random pyspark中的随机抽样与替换

Random pyspark中的随机抽样与替换,random,pyspark,apache-spark-sql,Random,Pyspark,Apache Spark Sql,我有一个带有9000个唯一ID的数据帧df 像 我想生成一个随机样本,替换这9000个ID 100000次。 我如何在Pypark中完成它 我试过了 df.sample(True,0.5,100) 但我不知道如何精确到100000个数字好的,所以首先要做的是。在你的(超过)样品中,你可能无法得到准确的100000份。原因是为了高效采样,Spark使用了一种叫做。基本上,这意味着它将通过您的RDD,并为每一行分配被包含的概率。因此,如果您想要一个10%的样本,每一行单独有10%的机会被包括在内,

我有一个带有9000个唯一ID的数据帧df

我想生成一个随机样本,替换这9000个ID 100000次。 我如何在Pypark中完成它

我试过了

df.sample(True,0.5,100)

但我不知道如何精确到100000个数字好的,所以首先要做的是。在你的(超过)样品中,你可能无法得到准确的100000份。原因是为了高效采样,Spark使用了一种叫做。基本上,这意味着它将通过您的RDD,并为每一行分配被包含的概率。因此,如果您想要一个10%的样本,每一行单独有10%的机会被包括在内,但它没有考虑它是否与您想要的数字完美相加,但对于大型数据集来说,它往往非常接近

代码如下所示:
df.sample(True,11.11111100)
。这将获取一个数据集样本,其大小等于原始数据集大小的11.11111倍。由于11.11111*9000~=100000,您将得到大约100000行


如果您想要精确的样本,必须使用
df.takeSample(True,100000)
。但是,这不是一个分布式数据集。这段代码将返回一个数组(非常大的数组)。如果它可以在主内存中创建,那么就这样做。但是,由于您需要准确的ID数量,我不知道如何以分布式方式进行此操作。

为了明确起见,您需要随机抽取9000个ID,其中每个样本中有4500个ID(由于我们使用替换样本,因此可能会重复此操作),你需要100000个这样的样本?9000是我拥有的不同ID的总体,我想用替换和随机的方法将总体抽样到100000。用简单的英语,我想从一个9000个id的罐子里随机抽取100000次。我希望这能帮上忙,谢谢。我现在会努力完成的。你好,卡蒂亚,非常感谢你的回答。我没有得到确切的计数,但是如果它以我想要的方式进行采样,它就足够好了。您可能是指df.rdd.takeSample()?没有这样的方法df.takeSample().sample()对我来说不适用于数据帧,尽管它在文档中给出了。它正在RDD上工作。我遗漏了什么?请参阅文档
df.sample(True,0.5,100)