如何从PySpark DataFrame中获取随机行?我只看到sample()
以分数作为参数的方法.将此分数设置1/numberOfRows
为随机结果,有时我不会得到任何行.
On RRD
有一个方法takeSample()
,它将您希望样本包含的元素数作为参数.我知道这可能很慢,因为你必须计算每个分区,但有没有办法在DataFrame上得到这样的东西?
我想从 PySpark 数据帧(最好以新的 PySpark 数据帧的形式)中选择 n 随机行(无需替换)。做这个的最好方式是什么?
以下是包含十行的数据框的示例。
+-----+-------------------+-----+
| name| timestamp|value|
+-----+-------------------+-----+
|name1|2019-01-17 00:00:00|11.23|
|name2|2019-01-17 00:00:00|14.57|
|name3|2019-01-10 00:00:00| 2.21|
|name4|2019-01-10 00:00:00| 8.76|
|name5|2019-01-17 00:00:00|18.71|
|name5|2019-01-10 00:00:00|17.78|
|name4|2019-01-10 00:00:00| 5.52|
|name3|2019-01-10 00:00:00| 9.91|
|name1|2019-01-17 00:00:00| 1.16|
|name2|2019-01-17 00:00:00| 12.0|
+-----+-------------------+-----+
Run Code Online (Sandbox Code Playgroud)
上面给出的数据框是使用以下代码生成的:
from pyspark.sql import *
df_Stats = Row("name", "timestamp", "value")
df_stat1 = df_Stats('name1', "2019-01-17 00:00:00", 11.23)
df_stat2 = df_Stats('name2', "2019-01-17 00:00:00", 14.57)
df_stat3 = df_Stats('name3', "2019-01-10 00:00:00", 2.21)
df_stat4 = df_Stats('name4', "2019-01-10 00:00:00", 8.76)
df_stat5 = df_Stats('name5', "2019-01-17 00:00:00", 18.71) …
Run Code Online (Sandbox Code Playgroud)