我有一个包含数千条记录的数据框,我想随机选择1000行到另一个数据框进行演示。我怎么能用Java做到这一点?
谢谢!
答案 0 :(得分:18)
您可以随机播放行,然后选择最高行:
import org.apache.spark.sql.functions.rand
dataset.orderBy(rand()).limit(n)
答案 1 :(得分:5)
您可以尝试使用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方法。但请记住:
dataset.rdd.takeSample(0, 1000, System.currentTimeMilis()).toDF()
takeSample将收集所有值。 答案 2 :(得分:2)