mle*_*ast 5 python random apache-spark-sql pyspark
我正在尝试随机采样 Pyspark 数据帧,其中列值满足特定条件。我想使用该sample
方法根据列值随机选择行。假设我有以下数据框:
+---+----+------+-------------+------+
| id|code| amt|flag_outliers|result|
+---+----+------+-------------+------+
| 1| a| 10.9| 0| 0.0|
| 2| b| 20.7| 0| 0.0|
| 3| c| 30.4| 0| 1.0|
| 4| d| 40.98| 0| 1.0|
| 5| e| 50.21| 0| 2.0|
| 6| f| 60.7| 0| 2.0|
| 7| g| 70.8| 0| 2.0|
| 8| h| 80.43| 0| 3.0|
| 9| i| 90.12| 0| 3.0|
| 10| j|100.65| 0| 3.0|
+---+----+------+-------------+------+
Run Code Online (Sandbox Code Playgroud)
我想0, 1, 2, 3
根据该result
列仅对每个样本中的 1 个(或任何特定数量)进行采样,因此我最终会得到以下结果:
+---+----+------+-------------+------+
| id|code| amt|flag_outliers|result|
+---+----+------+-------------+------+
| 1| a| 10.9| 0| 0.0|
| 3| c| 30.4| 0| 1.0|
| 5| e| 50.21| 0| 2.0|
| 8| h| 80.43| 0| 3.0|
+---+----+------+-------------+------+
Run Code Online (Sandbox Code Playgroud)
是否有一个好的编程方法来实现这一点,即为某一列中给出的每个值采用相同的行数?非常感谢任何帮助!
您可以使用sampleBy()
它返回分层样本,而无需根据每个层给出的分数进行替换。
>>> from pyspark.sql.functions import col
>>> dataset = sqlContext.range(0, 100).select((col("id") % 3).alias("result"))
>>> sampled = dataset.sampleBy("result", fractions={0: 0.1, 1: 0.2}, seed=0)
>>> sampled.groupBy("result").count().orderBy("key").show()
+------+-----+
|result|count|
+------+-----+
| 0| 5|
| 1| 9|
+------+-----+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7776 次 |
最近记录: |