分层抽样

Stratified sampling


分层抽样方法,sampleByKey和sampleByKeyExact,可以在键-值对的RDD上精确执行。
对于分层抽样,可以将键视为一个标签,而值作为一个特定的属性。
例如,密钥可以是男性或女性,也可以是文档id,而相应的值可以是人口中人口的年龄列表,也可以是文档中的单词列表。
sampleByKey方法会抛硬币来决定一个观察是否被取样,因此需要一个传递数据,并提供一个预期的样本大小。
sampleByKeyExact 需要比在sampleByKey中使用的每层简单随机抽样所需的资源多得多,但它将提供精确的采样大小和99.99%的置信度。

// an RDD[(K, V)] of any key value pairs
val data = sc.parallelize(
  Seq((1, 'a'), (1, 'b'), (2, 'c'), (2, 'd'), (2, 'e'), (3, 'f')))

// specify the exact fraction desired from each key
val fractions = Map(1 -> 0.1, 2 -> 0.6, 3 -> 0.3)

// Get an approximate sample from each stratum
val approxSample = data.sampleByKey(withReplacement = false, fractions = fractions)
// Get an exact sample from each stratum
val exactSample = data.sampleByKeyExact(withReplacement = false, fractions = fractions)

猜你喜欢

转载自www.cnblogs.com/lyy-blog/p/9294571.html