我有一个包含数千条记录的 Dataframe ,我想随机选择1000行到另一个 Dataframe 中进行演示。谢谢你,谢谢你
mccptt671#
在Python中,您可以对行进行混洗,然后选择最上面的行:
Python
import org.apache.spark.sql.functions.rand dataset.orderBy(rand()).limit(n)
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正在驱动程序中收集结果。
dataset.rdd.takeSample(0, 1000, System.currentTimeMilis()).toDF()
qltillow3#
我更喜欢这个在pyspark
df.sample(withReplacement=False, fraction=desired_fraction)
这是医生
wfsdck304#
3.1
sdf.sample(fraction=1.0).limit(n)
4条答案
按热度按时间mccptt671#
在
Python
中,您可以对行进行混洗,然后选择最上面的行:bakd9h0s2#
你可以试试sample()方法。不幸的是,你必须给予分数而不是数字。你可以这样写函数:
说明:我们必须取一小部分数据。如果我们有2000行,而您希望得到100行,则必须取总行数的0.5。如果您希望得到比DataFrame中更多的行,则必须得到1.0。调用limit()函数以确保四舍五入是正确的,并且您没有得到比指定更多的行。
编辑:我在其他答案中看到了takeSample方法.但请记住:
1.它是RDD的方法,而不是Dataset,因此您必须执行以下操作:
dataset.rdd.takeSample(0, 1000, System.currentTimeMilis()).toDF()
takeSample将收集所有值。1.请记住,如果您想要获取非常多的行,那么您将遇到OutOfMemoryError问题,因为takeSample正在驱动程序中收集结果。
qltillow3#
我更喜欢这个在pyspark
这是医生
wfsdck304#
在Pyspark〉=
3.1
中,请尝试以下操作: