我在数据框中有一个列,我需要在Pyspark中选择3个随机值。有人可以帮助我吗?
+---+
| id|
+---+
|123|
|245|
| 12|
|234|
+---+
欲望:
带有3个随机值的数组从该列获取:
**output**: [123, 12, 234]
您可以先使用rand()
函数以随机顺序订购:
df.select('id').orderBy(rand()).limit(3).collect()
有关rand()
功能的更多信息,请查看Pyspark.sql.functions.rand。
这是另一种可能更具性能的方法。
您可以使用此代码获取三个随机行:
df.rdd.takeSample(False, 3)
,如果您不想要一组行对象,则是如何使用三个整数创建数组:
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]
本文更详细地讨论了从数据框列获取随机值。