You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark合并DataFrame后如何随机抽取行?limit结果固定问题

Spark DataFrame 随机抽取行的解决方案

limit方法仅会从DataFrame的起始位置取指定行数,不会打乱数据原有顺序,因此每次执行都会得到相同结果,这是预期行为。要实现随机抽取行,可使用以下两种方法:

方法1:使用sample函数

sample支持按比例随机抽样,可选择放回/不放回模式,适合按比例取数的场景,也可结合limit获取固定行数:

# 不放回抽样,抽取10%的数据,seed设为None则每次结果随机
sampled_df = merged_df.sample(withReplacement=False, fraction=0.1, seed=None)
# 抽取固定10行
random_choices_df = sampled_df.limit(10)
random_choices_df.show()

若需要可复现的随机结果,给seed传入固定数值即可(比如seed=42)。

方法2:基于随机数排序后取数

为每行生成随机数并按其排序,再用limit取前N行,实现随机抽取:

from pyspark.sql.functions import rand

# 按随机数打乱顺序后取10行
random_choices_df = merged_df.orderBy(rand()).limit(10)
random_choices_df.show()

同样,rand()可传入固定seed值(如rand(100))得到可复现结果,不传参数则每次抽取结果不同。

单机环境下上述两种方法均可正常运行,无需额外配置。

内容的提问来源于stack exchange,提问作者lapots

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:33:17