在pyspark随机取样,更换

时间:2016-06-07 20:47:46

标签: pyspark spark-dataframe random-sample

我有一个包含9000个唯一ID的数据帧df。

喜欢

| id |
  1 
  2 

我想生成一个随机样本,将这9000个ID替换为100000次。 我怎么在pyspark

中做到这一点

我试过了 df.sample(真,0.5,100)

但我不知道如何准确到达100000号

1 个答案:

答案 0 :(得分:12)

好的,首先是第一件事。你的(过)样本中可能无法获得100,000个。原因是为了有效地采样,Spark使用了一种名为Bernouilli Sampling的东西。基本上这意味着它会遍历您的RDD,并为每一行分配一个被包含的概率。因此,如果你想要一个10%的样本,那么每一行都有10%的可能性被包括在内但是它没有考虑到它是否与你想要的数字完全相加,但是对于大型数据集它往往非常接近。

代码如下所示:df.sample(True, 11.11111, 100)。这将使数据集的样本等于原始数据集大小的11.11111倍。自11.11111 * 9,000~ = 100,000以来,您将获得大约100,000行。

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