在pyspark随机取样,更换

Shw*_*ble 8 random apache-spark-sql pyspark

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

喜欢

| id |
  1 
  2 
Run Code Online (Sandbox Code Playgroud)

我想生成一个随机样本,替换这些9000 ID 100000次.我怎么在pyspark中做到这一点

我试过df.sample(True,0.5,100)

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

Kat*_*ler 13

好的,首先要做的事情.你的(过)样本中可能无法获得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,所以我不知道以分布式方式执行此操作的方法.