PySpark 中的系统采样

Systematic sampling in PySpark

我对 PySpark 很陌生,一直在努力寻找我正在寻找的答案。

我的住户样本量很大,想进行系统抽样。就像真正的系统抽样一样,我想从一个随机起点开始,然后定期 select 个家庭(例如每 50 个家庭)。我研究了 sample() 和 sampleBy(),但我认为这些并不是我所需要的。任何人都可以就我如何做到这一点提出任何建议吗?非常感谢您的帮助!

您可能想使用 monotonically_increasing_id 然后对 50 求模以获得您想要的结果。

如果你只有 1 个分区,

monotonically_increasing_id 有效,所以如果你有不止 1 个分区,你可以考虑 row_number.

检查 https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.functions.monotonically_increasing_id.html

中的“备注”

row_number,

from pyspark.sql import functions as F
df = df.withColumn("index", F.row_number().over(Window.orderBy('somecol')))
     .filter(((F.col('index') + random_start) % 50) == 0)