Spark DataFrame – 选择n个随机行

我有一个包含数千条记录的数据框,我想随机选择1000行到另一个数据框进行演示。 我怎么能用Java做到这一点?

谢谢!

您可以尝试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.rdd.takeSample(0, 1000, System.currentTimeMilis()).toDF() takeSample将收集所有值。
  2. 请记住,如果您想获得很多行,那么您将遇到OutOfMemoryError问题,因为takeSample正在收集驱动程序中的结果。 仔细使用它

您可以随机播放行,然后选择最上面的行:

 import org.apache.spark.sql.functions.rand dataset.orderBy(rand()).limit(n)