Spark DataFrame -选择n个随机行

p1tboqfb  于 2022-11-25  发布在  Apache
关注(0)|答案(4)|浏览(394)

我有一个包含数千条记录的 Dataframe ,我想随机选择1000行到另一个 Dataframe 中进行演示。
谢谢你,谢谢你

mccptt67

mccptt671#

Python中,您可以对行进行混洗,然后选择最上面的行:

import org.apache.spark.sql.functions.rand

dataset.orderBy(rand()).limit(n)
bakd9h0s

bakd9h0s2#

你可以试试sample()方法。不幸的是,你必须给予分数而不是数字。你可以这样写函数:

def getRandom (dataset : Dataset[_], n : Int) = {
    val count = dataset.count();
    val howManyTake = if (count > n) n else count;
    dataset.sample(0, 1.0*howManyTake/count).limit (n)
}

说明:我们必须取一小部分数据。如果我们有2000行,而您希望得到100行,则必须取总行数的0.5。如果您希望得到比DataFrame中更多的行,则必须得到1.0。调用limit()函数以确保四舍五入是正确的,并且您没有得到比指定更多的行。
编辑:我在其他答案中看到了takeSample方法.但请记住:
1.它是RDD的方法,而不是Dataset,因此您必须执行以下操作:dataset.rdd.takeSample(0, 1000, System.currentTimeMilis()).toDF() takeSample将收集所有值。
1.请记住,如果您想要获取非常多的行,那么您将遇到OutOfMemoryError问题,因为takeSample正在驱动程序中收集结果。

qltillow

qltillow3#

我更喜欢这个在pyspark

df.sample(withReplacement=False, fraction=desired_fraction)

这是医生

wfsdck30

wfsdck304#

在Pyspark〉= 3.1中,请尝试以下操作:
sdf.sample(fraction=1.0).limit(n)

相关问题