Spark中组件Mllib的学习之基础概念篇 
1、解释 
分层抽样的概念就不讲了,具体的操作: 
RDD有个操作可以直接进行抽样:sampleByKey和sample等,这里主要介绍这两个 
(1)将字符串长度为2划分为层2,字符串长度为3划分为层1,对层1和层2按不同的概率进行抽样 
数据

  1. aa
  2. bb
  3. cc
  4. dd
  5. ee
  6. aaa
  7. bbb
  8. ccc
  9. ddd
  10. eee

比如: 
val fractions: Map[Int, Double] = List((1, 0.2), (2, 0.8)).toMap //设定抽样格式 
sampleByKey(withReplacement = false, fractions, 0) 
fractions表示在层1抽0.2,在层2中抽0.8 
withReplacement false表示不重复抽样 
0表示随机的seed

源码:

  1. /**
  2. * Return a subset of this RDD sampled by key (via stratified sampling).
  3. *
  4. * Create a sample of this RDD using variable sampling rates for different keys as specified by
  5. * `fractions`, a key to sampling rate map, via simple random sampling with one pass over the
  6. * RDD, to produce a sample of size that's approximately equal to the sum of
  7. * math.ceil(numItems * samplingRate) over all key values.
  8. *
  9. * @param withReplacement whether to sample with or without replacement
  10. * @param fractions map of specific keys to sampling rates
  11. * @param seed seed for the random number generator
  12. * @return RDD containing the sampled subset
  13. */
  14. def sampleByKey(withReplacement: Boolean,
  15. fractions: Map[K, Double],
  16. seed: Long = Utils.random.nextLong): RDD[(K, V)] = self.withScope {
  17.  
  18. require(fractions.values.forall(v => v >= 0.0), "Negative sampling rates.")
  19.  
  20. val samplingFunc = if (withReplacement) {
  21. StratifiedSamplingUtils.getPoissonSamplingFunction(self, fractions, false, seed)
  22. } else {
  23. StratifiedSamplingUtils.getBernoulliSamplingFunction(self, fractions, false, seed)
  24. }
  25. self.mapPartitionsWithIndex(samplingFunc, preservesPartitioning = true)
  26. }

2、代码:

  1. import org.apache.spark.{SparkConf, SparkContext}
  2.  
  3. object StratifiedSamplingLearning {
  4. def main(args: Array[String]) {
  5. val conf = new SparkConf().setMaster("local[4]").setAppName(this.getClass.getSimpleName.filter(!_.equals('$')))
  6. val sc = new SparkContext(conf)
  7. println("First:")
  8. val data = sc.textFile("D:\\TestData\\StratifiedSampling.txt") //读取数
  9. .map(row => {
  10. //开始处理
  11. if (row.length == ) //判断字符数
  12. (row, ) //建立对应map
  13. else (row, ) //建立对应map
  14. }).map(each => (each._2, each._1))
  15. data.foreach(println)
  16.  
  17. println("sampleByKey:")
  18. val fractions: Map[Int, Double] = List((, 0.2), (, 0.8)).toMap //设定抽样格式
  19. val approxSample = data.sampleByKey(withReplacement = false, fractions, ) //计算抽样样本
  20. approxSample.foreach(println)
  21.  
  22. println("Second:")
  23. val randRDD = sc.parallelize(List((, "cat"), (, "mouse"), (, "cup"), (, "book"), (, "tv"), (, "screen"), (, "heater")))
  24. val sampleMap = List((, 0.4), (, 0.8)).toMap
  25. val sample2 = randRDD.sampleByKey(false, sampleMap, ).collect
  26. sample2.foreach(println)
  27.  
  28. println("Third:")
  29. val a = sc.parallelize( to , )
  30. val b = a.sample(true, 0.8, )
  31. val c = a.sample(false, 0.8, )
  32. println("RDD a : " + a.collect().mkString(" , "))
  33. println("RDD b : " + b.collect().mkString(" , "))
  34. println("RDD c : " + c.collect().mkString(" , "))
  35. sc.stop
  36. }
  37. }

3、结果:

  1. First:
  2. (,aa)
  3. (,bbb)
  4. (,bb)
  5. (,ccc)
  6. (,cc)
  7. (,ddd)
  8. (,dd)
  9. (,eee)
  10. (,ee)
  11. (,aaa)
  12. sampleByKey:
  13. (,aa)
  14. (,bb)
  15. (,cc)
  16. (,ee)
  17. Second:
  18. (,cat)
  19. (,mouse)
  20. (,book)
  21. (,screen)
  22. (,heater)
  23. Third:
  24. RDD a : , , , , , , , , , , , , , , , , , , ,
  25. RDD b : , , , , , , ,
  26. RDD c : , , , , , , , , , , , , , ,

Spark Mllib之分层抽样的更多相关文章

  1. Spark Mllib里的分层抽样(使用map作为分层抽样的数据标记)

    不多说,直接上干货! 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mllib数理统计

  2. 《Spark MLlib机器学习实践》内容简介、目录

      http://product.dangdang.com/23829918.html Spark作为新兴的.应用范围最为广泛的大数据处理开源框架引起了广泛的关注,它吸引了大量程序设计和开发人员进行相 ...

  3. spark MLLib的基础统计部分学习

    参考学习链接:http://www.itnose.net/detail/6269425.html 机器学习相关算法,建议初学者去看看斯坦福的机器学习课程视频:http://open.163.com/s ...

  4. spark MLlib BasicStatistics 统计学基础

    一, jar依赖,jsc创建. package ML.BasicStatistics; import com.google.common.collect.Lists; import org.apach ...

  5. Spark MLlib 机器学习

    本章导读 机器学习(machine learning, ML)是一门涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多领域的交叉学科.ML专注于研究计算机模拟或实现人类的学习行为,以获取新知识.新 ...

  6. Spark MLlib - LFW

    val path = "/usr/data/lfw-a/*" val rdd = sc.wholeTextFiles(path) val first = rdd.first pri ...

  7. Spark MLlib 之 Basic Statistics

    Spark MLlib提供了一些基本的统计学的算法,下面主要说明一下: 1.Summary statistics 对于RDD[Vector]类型,Spark MLlib提供了colStats的统计方法 ...

  8. Spark MLlib Data Type

    MLlib 支持存放在单机上的本地向量和矩阵,也支持通过多个RDD实现的分布式矩阵.因此MLlib的数据类型主要分为两大类:一个是本地单机向量:另一个是分布式矩阵.下面分别介绍一下这两大类都有哪些类型 ...

  9. Spark MLlib - Decision Tree源码分析

    http://spark.apache.org/docs/latest/mllib-decision-tree.html 以决策树作为开始,因为简单,而且也比较容易用到,当前的boosting或ran ...

随机推荐

  1. android高级---->Handler的原理

    andriod提供了Handler来满足线程间的通信,上次在更新UI的时候也提到过Handler的使用,关于Handler的基本使用,参见博客(android基础---->子线程更新UI).今天 ...

  2. Error running app: Default Activity Not Found

    最近在调试安装Android Widget程序时,碰到Error running app: Default ActivityNot Found. 因为简单的Widget程序,如果不和应用程序关联,就不 ...

  3. Scriter CSS

    transition: height(quart-out,1.0s,quart-in); transform:rotate(50deg); http://www.terrainformatica.co ...

  4. Selenium模拟浏览器抓取淘宝美食信息

    前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...

  5. shell特殊变量,记录一下

    $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. ...

  6. vins-mono调试教程

    https://www.cnblogs.com/Jessica-jie/p/6950604.html

  7. en-zh(科学技术)science and technology

    S Korea to roll out 5G韩国正式推5G商用服务 South Korea will become the first country to commercially launch f ...

  8. Go编写的并行计算示例程序

    Go编写的并行计算示例程序 package main import "fmt" const ngoroute = 1000000 func f(left, right chan i ...

  9. [knowledge][perl][pcre][sed] sed / PCRE 语法/正则表达式

    一直用sed一直没有正经的学过语法,一直一知半解的用着. 因为,它用来perl的语法,要想搞懂,首先要搞懂perl,系统的入个门... 之前,man sed,man了好多次,总是没找到关键内容,今天在 ...

  10. 转:ActiveMQ的作用总结(应用场景及优势)

    原文地址: ActiveMQ的作用总结(应用场景及优势) 业务场景说明: 消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有着深入的应用, 队列的主要作用是消除高并发访问高峰,加快网站的响应速 ...