Spark DataFrame - 选择 n 个随机行
2022-09-01 07:23:41
我有一个包含数千条记录的数据帧,我想随机选择1000行到另一个数据帧中进行演示。如何在Java中执行此操作?
谢谢!
我有一个包含数千条记录的数据帧,我想随机选择1000行到另一个数据帧中进行演示。如何在Java中执行此操作?
谢谢!
您可以随机排列行,然后选取最上面的行:
import org.apache.spark.sql.functions.rand
dataset.orderBy(rand()).limit(n)
您可以尝试示例 () 方法。你不能给那里一个数字,而是分数。你可以这样编写函数:
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方法。但请记住:
dataset.rdd.takeSample(0, 1000, System.currentTimeMilis()).toDF()