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

取样,如果要求可以重复

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

Spark sample入门到精通相关推荐

  1. spark从入门到精通spark内存管理详解- 堆内堆外内存管理

    前言 Spark作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解Spark内存管理的基本原理,有助于更好地开发Spark应用程序和进行性能调优.本文将详细介绍两部 ...

  2. 「Spark从入门到精通系列」4.Spark SQL和DataFrames:内置数据源简介

    来源 |  Learning Spark Lightning-Fast Data Analytics,Second Edition 作者 | Damji,et al. 翻译 | 吴邪 大数据4年从业经 ...

  3. 【大数据】Spark从入门到精通

    一.参考资料 1. 视频教学 004.尚硅谷_Spark框架 - 快速上手 - 开发环境准备

  4. StarRocks从入门到精通系列六:使用EXPORT、Spark、Flink从StarRocks中导出数据

    StarRocks从入门到精通系列六:使用EXPORT.Spark.Flink从StarRocks中导出数据 一.使用EXPORT导出数据 1.背景信息 2.导出流程 3.基本原理 4.相关配置 5. ...

  5. [学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程

    文章目录 视频资料: 思维导图 一.Spark基础入门(环境搭建.入门概念) 第二章:Spark环境搭建-Local 2.1 课程服务器环境 2.2 Local模式基本原理 2.3 安装包下载 2.4 ...

  6. 赵强老师:大数据从入门到精通(20)Spark RDD-赵强老师-专题视频课程

    赵强老师:大数据从入门到精通(20)Spark RDD-116人已学习 课程收益     本系列课程将基于RedHat Linux 7.4版本.Hadoop 2.7.3.Spark 2 版本全面介绍大 ...

  7. GPU 编程入门到精通(一)之 CUDA 环境安装

    GPU 编程入门到精通(一)之 CUDA 环境安装 标签: cudagpunvidia GPU 编程入门到精通(一)之 CUDA 环境安装 标签: cudagpunvidia 2014-04-11 2 ...

  8. 2018大数据学习路线从入门到精通

    最近很多人问小编现在学习大数据这么多,他们都是如何学习的呢.很多初学者在萌生向大数据方向发展的想法之后,不免产生一些疑问,应该怎样入门?应该学习哪些技术?学习路线又是什么?今天小编特意为大家整理了一份 ...

  9. python网络爬虫开发从入门到精通_Python突击-从入门到精通到项目实战

    原标题:Python突击-从入门到精通到项目实战 python语言近年来越来越被程序相关人员喜欢和使用,因为其不仅简单容易学习和掌握,而且还有丰富的第三方程序库和相应完善的管理工具:从命令行脚本程序到 ...

最新文章

  1. 同一个类 cannot be cast to_留学热门assignment之 税收筹划类essay
  2. poj2186(强连通分量)
  3. 用Python编写代码分析《英雄联盟》游戏胜利的最重要因素
  4. Ubuntu 用vsftpd 配置FTP服务器
  5. solr mysql 导入命令_(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据...
  6. APP功能需求第一版
  7. Google API 设计指南 - 前言
  8. Struts2访问Servlet的三种方式
  9. yum安装elasticsearch慢_ELK elasticsearch yum 安装(4th)
  10. Linux下配置简单的图形桌面环境
  11. IT程序员们平时都喜欢逛什么论坛呢?
  12. java求最大子数组 (分治算法)
  13. 在SharePoint 2010中创建联系人Web数据库网站
  14. Java中的可变参数使用
  15. SPSS均值过程分析教程
  16. 推荐姊妹篇:搜索中的深度匹配模型
  17. 大规模MIMO多用户系统中的导频调度和预编码方法
  18. 暗黑版微信,官方发布! (附下载链接)
  19. bootbox.confirm 官方例子 网址
  20. 基于labview的虚拟简单信号发生器

热门文章

  1. ef core mysql 生成迁移失败_EF Core 数据库迁移(Migration)
  2. distinct返回null报错_在Java中如何避免“!=null”式的判空语句?
  3. as 怎么将多个cpp文件代码编译成so_你编写的Java代码是咋跑起来的?
  4. graph面板x轴模式包括哪些_Grafana panel之Graph
  5. JSR-303校验-转载
  6. python鸡兔同笼编程运行结果_Python解决鸡兔同笼问题的方法
  7. extract进程 oracle,OracleGoldenGate系列:Extract进程的恢复原理
  8. python有哪些函数怎么用_必须掌握的常用python函数有哪些?
  9. vc 2008建立c语言,C语言纯外行,要运行别人给的一个代码,用VC2008
  10. 直接请求接口_【分享】接口是什么?实现原理的是什么?