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

5

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

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

期望:

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

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

你可以执行 df.select("id").limit(3).show() 吗? - mrsrinivas
它应该是随机的。 - Thaise
1
df.select("id").rdd.takeSample(false, 3).collect() - mrsrinivas
2个回答

10
您可以使用rand()函数随机排序:
 df.select('id').orderBy(rand()).limit(3).collect()

想要了解有关 rand() 函数的更多信息,请查看pyspark.sql.functions.rand


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]

这篇文章更详细地讨论了如何从DataFrame列中获取随机值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接