Pyspark - 如何从DataFrame列中获取随机值

时间:2017-10-04 12:15:53

标签: pyspark spark-dataframe pyspark-sql

我在DataFrame中有一列我需要在Pyspark中选择3个随机值。有人可以帮我吗?

+---+
| id|
+---+
|123| 
|245| 
| 12|
|234|
+---+

欲望:

从该列获取具有3个随机值的数组:

**output**: [123, 12, 234]

2 个答案:

答案 0 :(得分:1)

您可以先使用rand()功能以随机顺序排序:

 df.select('id').orderBy(rand()).limit(3).collect()

有关rand()功能的详细信息,请查看link

答案 1 :(得分:0)

这是另一种可能更有效的方法。

您可以使用以下代码获取三个随机行:

df.rdd.takeSample(False, 3)

如果不想使用Row对象的数组,这里是创建具有三个整数的数组的方法:

list(map(lambda row: row[0], df.rdd.takeSample(False, 3)))

df.select('id').orderBy(F.rand()).limit(3)将生成此实际计划:

== Physical Plan ==
TakeOrderedAndProject(limit=3, orderBy=[_nondeterministic#38 ASC NULLS FIRST], output=[id#32L])
+- *(1) Project [id#32L, rand(-4436287143488772163) AS _nondeterministic#38]

post详细讨论了如何从DataFrame列中获取随机值。