从RDD获取随机行

时间:2015-10-24 22:38:44

标签: scala apache-spark

我试图从sparkSQL RDD中找回N个随机行,如下所示:

sqlContext.sql("SELECT col FROM tablename").sample(true, .7, 98712).show()

.7和98712只是我正在使用的垃圾数字。

我真的没有看到随机结果,想知道如何从RDD中获取一些随机行?

1 个答案:

答案 0 :(得分:3)

这似乎是因为你的第三个参数手动设置种子而不是为你选择的随机种子。从DataFrame实现,这里有两种采样方法:

/**
 * Returns a new [[DataFrame]] by sampling a fraction of rows.
 ...
 */
def sample(withReplacement: Boolean, fraction: Double, seed: Long): DataFrame = {
  Sample(0.0, fraction, withReplacement, seed, logicalPlan)
}

/**
 * Returns a new [[DataFrame]] by sampling a fraction of rows, using a random seed.
 ...
 */
def sample(withReplacement: Boolean, fraction: Double): DataFrame = {
  sample(withReplacement, fraction, Utils.random.nextLong)
}

只需删除第三个参数即可返回随机行。