我需要一种方法从一个数据集中得到一些x个数的唯一的随机行。我试过了 sample 方法,但它有时会选择重复的行。数据集的示例方法:https://spark.apache.org/docs/2.2.1/api/java/org/apache/spark/sql/dataset.html#sample-布尔双精度-
sample
woobm2wo1#
您应该使用带有WITHREPLACEOFFALSE的sample函数,例如,您可以使用:
val sampledData=df.sample(withReplacement=false,0.5)
但这并不能保证精确地提供给定数据集总数的一小部分。为此,在通过sample函数获得采样数据之后,取采样数据的x实体。
n3ipq98p2#
withreplacement=>“false”的示例函数总是选择不同的行 df1.sample(false, 0.1).show() 示例(带替换的布尔值,双分数)考虑以下示例:其中,withreplacement=>“true”提供了可以通过计数验证的重复行,但withreplacement=>“false”没有。
df1.sample(false, 0.1).show()
import org.apache.spark.sql.functions._ val df1 = ((1 to 10000).toList).zip(((1 to 10000).map(x=>x*2))).toDF("col1", "col2") // df1.sample(false, 0.1).show() println("Sample Count for with Replacement : " + df1.sample(true, 0.1).count) println("Sample Count for with Out Replacement : " + df1.sample(false, 0.1).count) df1.sample(true, 0.1).groupBy($"col1", $"col2").count().filter($"count">1).show(5) df1.sample(false, 0.1).groupBy($"col1", $"col2").count().filter($"count">1).show(5) Sample Count for with Replacement : 978 Sample Count for with Out Replacement : 973 +----+-----+-----+ |col1| col2|count| +----+-----+-----+ |7464|14928| 2| |6080|12160| 2| |6695|13390| 2| |3393| 6786| 2| |2137| 4274| 2| +----+-----+-----+ only showing top 5 rows +----+----+-----+ |col1|col2|count| +----+----+-----+ +----+----+-----+
2条答案
按热度按时间woobm2wo1#
您应该使用带有WITHREPLACEOFFALSE的sample函数,例如,您可以使用:
但这并不能保证精确地提供给定数据集总数的一小部分。为此,在通过sample函数获得采样数据之后,取采样数据的x实体。
n3ipq98p2#
withreplacement=>“false”的示例函数总是选择不同的行
df1.sample(false, 0.1).show()
示例(带替换的布尔值,双分数)考虑以下示例:
其中,withreplacement=>“true”提供了可以通过计数验证的重复行,但withreplacement=>“false”没有。