scrapy菜鳥教程,Spark sample入門到精通

 2023-12-06 阅读 21 评论 0

摘要:Spark 采樣是一種從數據集獲取隨機采樣記錄的機制,當您擁有較大的數據集并且想要分析/測試數據子集(例如原始文件的 10%)時,這非常有用。 Spark 提供了 RDD、DataFrame 和DataSet API 上的采樣方法來獲取樣本數據,本文將介紹如何獲取隨機采

Spark 采樣是一種從數據集獲取隨機采樣記錄的機制,當您擁有較大的數據集并且想要分析/測試數據子集(例如原始文件的 10%)時,這非常有用。

Spark 提供了 RDD、DataFrameDataSet API 上的采樣方法來獲取樣本數據,本文將介紹如何獲取隨機采樣記錄以及如何每次運行時獲取相同的隨機采樣,以及更多使用 scala 示例獲取更多示例。

數據分析師和數據科學家最常用數據采樣來獲取數據集子集的統計數據,然后再將其應用于大型數據集。

dataframe 取樣

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(","))

RDD采樣

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(","))

總結

  • rdddataframe都可以進行取樣
  • 取樣可以設置比例,是否放回等等
  • 取樣可以用于數據傾斜的預估

參考

Spark SQL Sampling with Examples — SparkByExamples

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/189317.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息