Spark 采樣
是一種從數據集獲取隨機采樣記錄
的機制,當您擁有較大的數據集并且想要分析/測試數據子集(例如原始文件的 10%)時,這非常有用。
Spark 提供了 RDD、DataFrame
和DataSet API
上的采樣方法來獲取樣本數據,本文將介紹如何獲取隨機采樣記錄以及如何每次運行時獲取相同的隨機采樣,以及更多使用 scala 示例獲取更多示例。
數據分析師和數據科學家最常用數據采樣來獲取數據集子集的統計數據,然后再將其應用于大型數據集。
val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample").getOrCreate();
val df: Dataset[lang.Long] = spark.range(100)
println(df.count()) //100
//取樣10%,但是并不精確,比如這里某次取出來的結果就不是10個
//3,17,40,55,58,66,73,93 而是8個
val sadf: Dataset[lang.Long] = df.sample(withReplacement = false, 0.1)
println(sadf.collect().mkString(","))
取樣,要求每次返回相同的結果,就需要設置種子
的值
val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample").getOrCreate();
val df: Dataset[lang.Long] = spark.range(100)
println(df.count()) //100
//第三個參數代表種子,可以保證每次取樣都是相同的結果
//13,34,46,60,68,86,88
val sadf: Dataset[lang.Long] = df.sample(withReplacement = false, 0.1,123)
println(sadf.collect().mkString(","))
scrapy菜鳥教程。取樣,如果要求可以重復
val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample").getOrCreate();
val df: Dataset[lang.Long] = spark.range(100)
println(df.count()) //100
//取完樣后還放回去,就是可以重復取出某個元素,第一個參數設為true
//0,5,9,11,14,14,16,17,21,29,33,41,42,52,52,54,58,65,65,71,76,79,85,96
val sadf: Dataset[lang.Long] = df.sample(withReplacement = true, 0.3,123)
println(sadf.collect().mkString(","))
val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample").getOrCreate();
val rdd: RDD[Long] = spark.sparkContext.range(0, 100)
//9,38,40,52,53,57,59,79,88,
//RDD也可以采用,df也可以采樣!采樣的結果還是個rdd
val sardd: RDD[Long] = rdd.sample(withReplacement = false, 0.1, 0)
println(sardd.collect().mkString(","))
println(rdd.sample(withReplacement = true, 0.3, 123).collect().mkString(","))
規定個數而非規定比例進行取樣
val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample").getOrCreate();
val rdd: RDD[Long] = spark.sparkContext.range(0, 100)
//takeSample也可以取樣,不過返回值不是rdd,是array,另外,第二個參數直接規定取樣的個數
//67,96,29,46,34,51,0,40,52,76
val sardd: Array[Long] = rdd.takeSample(withReplacement = false, 10, 123)
println(sardd.mkString(","))
rdd
和dataframe
都可以進行取樣比例
,是否放回
等等數據傾斜
的預估Spark SQL Sampling with Examples — SparkByExamples
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态