RDD(弹性分布式数据集)是Spark的核心抽象。它是一组元素,在集群的节点之间进行分区,以便我们可以对其执行各种并行操作。

创建RDD的两种方式:

  • 并行化驱动程序中的现有数据;
  • 引用外部存储系统中的数据集。

并行化集合

要创建并行化集合,在驱动程序中现有的集合上调用SparkContextparallelize方法。复制集合的每个元素以形成可以并行操作的分布式数据集。
%Spark
val info=Array(1,2,3,4)
val distInfo=sc.parallelize(info)
%操作分布式数据集
distinfo.reduce((a, b) => a + b)

外部数据集

在Spark中,可以从Hadoop支持的任何类型的存储源(如HDFS,Cassandra,HBase甚至本地文件系统)创建分布式数据集。Spark 支持文本文件(text files),SequenceFiles 和其他 Hadoop InputFormat

SparkContexttextFile方法可用于创建RDD的文本文件。此方法获取文件的URI(本地路径或hdfs://,s3n://等)并读取文件的数据,将文件读取成一个行集合。

一旦创建完成,distFiile 就能做数据集操作。例如,我们可以用下面的方式使用 map 和 reduce 操作将所有行的长度相加:distFile.map(s => s.length).reduce((a, b) => a + b)

RDD的两种操作:

  • 转换
  • 行动

转换:在Spark中,转换的作用是从现有数据集创建新数据集。转换是惰性的,因为它们仅在动作需要将结果返回到驱动程序时才计算。

  • map(func) - 它返回一个新的分布式数据集, 该数据集是通过函数func传递源的每个元素而形成的。
  • filter(func) - 它返回一个新数据集, 该数据集是通过选择函数func返回true的源元素而形成的。
  • flatMap(func) - 每个输入项可以映射到零个或多个输出项, 因此函数func应该返回序列而不是单个项。
  • mapPartitions(func) - 它类似于map,但是在RDD的每个分区(块)上单独运行, 因此当在类型T的RDD上运行时, func必须是Iterator <T> => Iterator <U>类型。
  • mapPartitionsWithIndex(func) - 它类似于mapPartitions,它为func提供了一个表示分区索引的整数值,因此当在类型T的RDD上运行时,func必须是类型(Int,Iterator <T>)=> Iterator <U>
  • sample(withReplacement, fraction, seed) - 它使用给定的随机数生成器种子对数据的分数部分进行采样,有或没有替换。
  • union(otherDataset) - 它返回一个新数据集,其中包含源数据集和参数中元素的并集。
  • intersection(otherDataset) - 它返回一个新的RDD,其中包含源数据集和参数中的元素的交集。
  • distinct([numPartitions])) - 它返回一个新数据集,其中包含源数据集的不同元素。
  • groupByKey([numPartitions]) - 当在(K,V)对的数据集上调用时,它返回(K,Iterable)对的数据集。
  • reduceByKey(func, [numPartitions]) - 当调用(K,V)对的数据集时,返回(K,V)对的数据集,其中使用给定的reduce函数func聚合每个键的值,该函数必须是类型(V,V)=>V
  • aggregateByKey(zeroValue)(seqOp, combOp, [numPartitions]) - 当调用(K,V)对的数据集时,返回(K,U)对的数据集,其中使用给定的组合函数和中性“零”值聚合每个键的值。
  • sortByKey([ascending], [numPartitions]) - 它返回按键按升序或降序排序的键值对的数据集,如在布尔ascending参数中所指定。
  • join(otherDataset, [numPartitions])-当调用类型(K,V)(K,W)的数据集时,返回(K,(V,W))对的数据集以及每个键的所有元素对。通过leftOuterJoinrightOuterJoinfullOuterJoin支持外连接。
  • cogroup(otherDataset, [numPartitions])-当调用类型(K,V)(K,W)的数据集时,返回(K,(Iterable,Iterable))元组的数据集。此操作也称为groupWith
  • cartesian(otherDataset)-当调用类型为T和U的数据集时,返回(T,U)对的数据集(所有元素对)。
  • pipe(command, [envVars])-通过shell命令管道RDD的每个分区,例如, 一个Perl或bash脚本。
  • coalesce(numPartitions)-它将RDD中的分区数减少到numPartitions
  • repartition(numPartitions) -它随机重新调整RDD中的数据,以创建更多或更少的分区,并在它们之间进行平衡。
  • repartitionAndSortWithinPartitions(partitioner) - 它根据给定的分区器对RDD进行重新分区,并在每个生成的分区中键对记录进行排序。

行动:在Spark中,操作的作用是在对数据集运行计算后将值返回给驱动程序。

  • reduce(func):它使用函数func(它接受两个参数并返回一个)来聚合数据集的元素。该函数应该是可交换的和关联的,以便可以并行正确计算。
  • collect():它将数据集的所有元素作为数组返回到驱动程序中。在过滤器或其他返回足够小的数据子集的操作之后,这通常很有用。
  • count() :它返回数据集中的元素数。
  • first() 它返回数据集的第一个元素(类似于take(1))
  • take(n) 它返回一个包含数据集的前n个元素的数组。
  • takeSample(withReplacement, num, [seed]) 它返回一个数组,其中包含数据集的num个元素的随机样本,有或没有替换,可选地预先指定随机数生成器种子。
  • takeOrdered(n, [ordering]) 它使用自然顺序或自定义比较器返回RDD的前n个元素。
  • saveAsTextFile(path):它用于将数据集的元素作为文本文件(或文本文件集)写入本地文件系统,HDFS或任何其他Hadoop支持的文件系统的给定目录中。
  • saveAsSequenceFile(path):它用于在本地文件系统,HDFS或任何其他Hadoop支持的文件系统中的给定路径中将数据集的元素编写为Hadoop SequenceFile。
  • saveAsObjectFile(path):它用于使用Java序列化以简单格式编写数据集的元素,然后可以使用SparkContext.objectFile()加载。
  • countByKey():它仅适用于类型(K,V)的RDD。因此,它返回(K,Int)对的散列映射与每个键的计数。
  • foreach(func):它在数据集的每个元素上运行函数func以获得副作用,例如更新累加器或与外部存储系统交互。

Spark RDD学习的更多相关文章

  1. Spark RDD学习笔记

    一.学习Spark RDD RDD是Spark中的核心数据模型,一个RDD代表着一个被分区(partition)的只读数据集. RDD的生成只有两种途径: 一种是来自于内存集合或外部存储系统: 另一种 ...

  2. Spark菜鸟学习营Day3 RDD编程进阶

    Spark菜鸟学习营Day3 RDD编程进阶 RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lambda表示式来替换对象写 ...

  3. Spark菜鸟学习营Day1 从Java到RDD编程

    Spark菜鸟学习营Day1 从Java到RDD编程 菜鸟训练营主要的目标是帮助大家从零开始,初步掌握Spark程序的开发. Spark的编程模型是一步一步发展过来的,今天主要带大家走一下这段路,让我 ...

  4. 【spark 深入学习 06】RDD编程之旅基础篇02-Spaek shell

    --------------------- 本节内容: · Spark转换 RDD操作实例 · Spark行动 RDD操作实例 · 参考资料 --------------------- 关于学习编程方 ...

  5. 【spark 深入学习 03】Spark RDD的蛮荒世界

    RDD真的是一个很晦涩的词汇,他就是伯克利大学的博士们在论文中提出的一个概念,很抽象,很难懂:但是这是spark的核心概念,因此有必要spark rdd的知识点,用最简单.浅显易懂的词汇描述.不想用学 ...

  6. spark学习13(spark RDD)

    RDD及其特点 1)RDD(Resillient Distributed Dataset)弹性分布式数据集,是spark提供的核心抽象.它代表一个不可变.可分区.里面的元素可并行计算的集合 2)RDD ...

  7. Spark菜鸟学习营Day5 分布式程序开发

    Spark菜鸟学习营Day5 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...

  8. Spark菜鸟学习营Day4 单元测试程序的编写

    Spark菜鸟学习营Day4 单元测试程序的编写 Spark相比于传统代码是比较难以调试的,单元测试的编写是非常必要的. Step0:需求分析 在测试案例编写前,需完成需求分析工作,明确程序所有的输入 ...

  9. Spark菜鸟学习营Day2 分布式系统需求分析

    Spark菜鸟学习营Day2 分布式系统需求分析 本分析主要针对从原有代码向Spark的迁移.要注意的是Spark和传统开发有着截然不同的思考思路,所以我们需要首先对原有代码进行需求分析,形成改造思路 ...

随机推荐

  1. PHP 的扩展类型及安装方式

    扩展类型 底层扩展(基于C语言): PECL 上层扩展(基于PHP 语言): PEAR Composer PECL # 查找扩展 $ pecl search extname # 安装扩展 $ pecl ...

  2. 年功序列c++游戏

    题目描述 在虚拟国度里多了很多 Virtual oier,为了树立对后辈的威信,从第 11 个 Virtual oier 开始的 oier 们搞起了年功序列的制度. 虚拟国度的创始人 oier Cht ...

  3. win10 安装vb -打开后一直显示无响应-解决

    1.成功安装vb ,美滋滋的运行 ,但是一直卡在无响应状态, 2.解决 使用管理员权限打开即可,也可以更改兼容为win7/8, 神奇的是,我这电脑自用过一次管理员权限打开,后面再使用vb可以不用管理员 ...

  4. HTTP 408 问题 - Koa body parser

    环境描述: 1.nodejs 作为 api 服务器,转发请求给 nginx 2.用 curl 测试,返回 408 找了很久没有找到原因,发现了一篇文章: https://lujunda.cn/2016 ...

  5. Vue养成之路

    目录 Vue系列教程(一)之初识Vue Vue系列教程(二)之Vue进阶 Vue系列继承(三)之Vue-cli脚手架的使用 ... 更新中 基础入门 Vue基础(一)之es6 Vue基础(二)之箭头函 ...

  6. 新增访客数量MR统计之NewInstallUserMapper中维度信息准备

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新)云盘目录说明:tools目录是安装包res 目录是每一个课件对应的代码和资源等doc 目录是一 ...

  7. BootStrap 是什么东西?

    Bootstrap Bootstrap 能很快速搭建一整套页面.是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.所有设备都可以适配.所有项目都适用.1 ...

  8. markdown mermaid状态图

    状态图 状态图是一种用于计算机科学和相关领域描述系统行为的图.状态图要求描述的系统由有限数量的状态组成. 语法: stateDiagram-v2 [*] --> Still Still --&g ...

  9. 输出前 n 个Fibonacci数

    本题要求编写程序,输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内.Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如 ...

  10. Scratch 3 矢量编辑器——“临摹”一只哆啦A梦

    利用Scratch来制作一些小作品,常常需要到网上去找图片,而网上下载的图片一般都是位图,往往存在两个问题: 图片不够清晰,当图片放大后会出现"马赛克"现象: 图片中存在不必要的背 ...