1. 什么是RDD?

RDD 是Resilient Distributed Dataset的简称。它是Apache Spark的基本数据结构。它是一个不可变的对象集合,在集群的不同节点上进行计算。

  1. Resilient:即在RDD lineage(DAG)的帮助下具有容错能力,能够重新计算由于节点故障而丢失或损坏的数据分区。
  2. Distributed:数据分布在多个节点上。
  3. Dataset:表示所操作的数据集。用户可以通过JDBC从外部加载数据集,数据集可以是JSON文件、CSV文件、文本文件或数据库
  1. RDD的特点

1、内存计算:它将中间计算结果存储在分布式内存(RAM)中,而不是磁盘中。

2、延迟计算:Apache Spark中的所有transformation都是惰性的,因为它们不会立即计算结果,它们会记住应用于数据集的那些transformation。直到action出现时,才会真正开始计算。

3、容错性:Spark RDDs能够容错,因为它们跟踪数据沿袭信息,以便在故障时自动重建丢失的数据。

4、不可变性:跨进程共享数据是安全的。它也可以在任何时候创建或检索,这使得缓存、共享和复制变得容易。因此,它是一种在计算中达到一致性的方法。

5、分区性:partition是Spark RDD中并行性的基本单元,每个分区都是数据的逻辑分区。Partition—task一 一对应

6、持久化:用户可以声明他们将重用哪些RDDs,并为它们选择存储策略。

7、数据本地性:RDDs能够定义计算分区的位置首选项。位置首选项是关于RDD位置的信息。

  1. Spark RDD的操作类型

Apache Spark中的RDD支持两种操作:

  1. Transformation
  2. Actions
    1. Transformation操作:

Spark RDD transformation操作是一个从现有的RDD生成新RDD的函数(方法、算子)。如:map(), filter(), reduceByKey()。

Transformation操作都是延迟计算的操作。

有两种类型transformation:窄变换、宽变换(窄依赖、宽依赖)。

  1. 窄依赖:它是map、filter这样数据来自一个单独的分区的操作。即输出RDD分区中的数据,来自父RDD中的单个分区。
  1. 宽依赖:在子RDD单个分区中计算结果所需的数据可能存在于父RDD的多个分区中。类似groupByKey()和reduceByKey()这样的transformation。宽依赖也称为shuffle transformation。
  1. action操作

Spark中的Action操作,返回RDD计算的最终结果,其结果是一个值,而不是一个RDD。Action触发血缘关系中RDD上的transformation操作的真正计算,计算结果返回Driver端或者写入数据库。

这种设计使Spark运行更加高效。例如:map操作返回的数据集用于reduce操作,返回到driver端的只是reduce的结果值,而不是map操作的数据集。

常见的Action:first(), take(), reduce(), collect(), the count() 。

  1. 创建RDD(Spark IDEA编程)

三种创建RDDs的方法:

  1. 使用集合创建RDD
  2. 使用已有RDD创建RDD
  3. 从外部数据源创建RDD

在我们学习Spark的初始阶段,RDDs通常是由集合创建的,即在Driver程序中创建集合并将其传递给SparkContext的 parallelize ()方法。这种方法很少在正式环境中使用,因为这种方法的整个数据集位于一台主机上。

首先实例化SparkContext对象

注意:一个JVM中处于激活状态的SparkContext对象

---scala

val conf = new SparkConf().setAppName(appName).setMaster(master)

val sc=new SparkContext(conf)

---Java

SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);

JavaSparkContext sc = new JavaSparkContext(conf);

其中 appName用于显示在Spark集群的webUI上面。Master是一个spark、YARN、mesos集群URL,或者是一个local字符串。实际项目中,在集群上运行时,不会对master进行硬编码。而是用spark-submit启动应用程序,并传递master给应用程序。但是,对于本地测试和单元测试,可以使用local运行Spark。

  1. 使用集合创建RDD

--scala

val data = Array(1, 2, 3, 4, 5)

val distData = sc.parallelize(data)

--java

List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);

JavaRDD<Integer> distData = sc.parallelize(data);

  1. 从外部数据源创建RDD

Spark可以从Hadoop支持的任何存储源创建分布式数据集,包括本地文件系统、HDFS、Cassandra、HBase、Amazon S3等。Spark支持文本文件、SequenceFiles和任何其他Hadoop InputFormat。

  1. 读取本地文件

文本文件RDDs可以使用SparkContext的textFile方法创建。此方法接受文件的URI(机器上的本地路径或hdfs://、s3a://等URI),并将其作为行集合读取。下面是一个示例调用:

val distFile = sc.textFile("data.txt")

一旦创建,就可以对distFile进行相应操作。例如,我们可以将所有行的长度相加,使用map和reduce操作:

distFile.map(s => s.length).reduce((a, b) => a + b).

关于用Spark读取文件的一些注意事项:

  1. 如果使用本地文件系统上的路径,则必须在worke节点上的同一路径上,此文件可访问。要么将文件复制到所有worker,要么使用一个挂载网络的共享文件系统。
  2. Spark所有基于文件的输入方法(textFile等),支持在目录、压缩文件和通配符上运行,例如:

textFile("/my/directory"), textFile("/my/directory/*.txt"),  textFile("/my/directory/*.gz").

  1. textFile方法还接受一个可选的第二个参数,用于控制文件的分区数量。默认情况下,Spark为文件的每个块创建一个分区(HDFS中的块默认为128MB),但是您也可以通过传递更大的值来要求更高数量的分区。注意,分区数不能少于块数。

除了文本文件,Spark的Scala API还支持其他几种数据格式:

  1. SparkContext.wholeTextFiles允许您读取包含多个小文本文件的目录,并将它们作为 (filename, content) 的键值对返回。这与textFile不同,textFile将在每个文件中每行返回一条记录。分区由数据本地性决定,在某些情况下,数据本地性可能导致分区太少。对于这些情况,wholetextfile提供了控制最小分区数量的第二个可选参数。
  2. 对于SequenceFiles,使用SparkContext的sequenceFile[K, V]方法,其中K和V是文件中的键和值的类型。这些应该是HadoopWritable接口的子类,比如IntWritable和Text。
  3. 对于其他Hadoop inputformat,您可以使用SparkContext.hadoopRDD方法,它接受任意的JobConf和输入格式类、键类和值类。将这些设置为与使用输入源Hadoop作业相同的方式。您还可以使用SparkContext。基于“new”MapReduce API (org.apache.hadoop.mapreduce)的inputformat的newAPIHadoopRDD。
    1. 读取HDFS上的数据
  1. 启动hdfs
  2. 读取hdfs上的数据

val textFileRDD=sc.textFile("hdfs://bigdata01:9000/testdata/order.txt")

val count=textFileRDD.count()

println("count:"+count)

Spark编程核心抽象—RDD相关推荐

  1. Spark详解(三):Spark编程模型(RDD概述)

    1. RDD概述 RDD是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现.RDD是Spark最核心的东西,它表示已被分区,不可变的并能够被并行 ...

  2. 转: Spark 的核心概念 RDD

    转自:  https://juejin.im/post/6844903826953076750 1.RDD 概述 1.1 什么是 RDD ? RDD(Resilient Distributed Dat ...

  3. 《循序渐进学Spark 》Spark 编程模型

    本节书摘来自华章出版社<循序渐进学Spark >一书中的第1章,第3节,作者 小象学院 杨 磊,更多章节内容可以访问云栖社区"华章计算机"公众号查看. Spark机制原 ...

  4. Spark核心编程系列(一)——RDD详解

    目录 Spark核心编程系列--RDD详解(一) RDD概念 RDD与IO之间的关系 RDD的核心属性 RDD执行原理 基础编程 RDD创建 RDD的并行度与分区 参考 Spark核心编程系列--RD ...

  5. 理解Spark的核心RDD

    与许多专有的大数据处理平台不同,Spark建立在统一抽象的RDD之上,使得它可以以基本一致的方式应对不同的大数据处理场景,包括MapReduce,Streaming,SQL,Machine Learn ...

  6. Spark RDD 论文详解(三)Spark 编程接口

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  7. spark期末大作业RDD编程初级实践

    1.需求描述 本次实验需要:系统:linux unbuntu14.04,处理器:至少需要两个处器,一个内核,内存:至少4G,硬盘空间:大小需要20GB.Hadoop:2.7.1以上版本,JDK:1.8 ...

  8. Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)

    Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集) 铺垫 在hadoop中一个独立的计算,例如在一个迭代过程中,除可复制的文件系统(HDFS)外没有 ...

  9. Spark 的核心 RDD 以及 Stage 划分细节,运行模式总结

    精选30+云产品,助力企业轻松上云!>>> 阅读文本大概需要 5 分钟. 以下内容,部分参考网络资料,也有自己的理解, 图片 99% 为自己制作.如有错误,欢迎留言指出,一起交流. ...

  10. 【Spark Core】【RDD】【01】核心属性 执行原理

    理解RDD 刚从地里挖出来的土豆食材.清洗过后的干净土豆.生薯片.烤熟的薯片,流水线上这些食材的不同形态,就像是 Spark 中 RDD 对于不同数据集合的抽象. RDD 具有 4 大属性,分别是 p ...

最新文章

  1. html5关于定位功能的实现
  2. 解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题...
  3. 微信公众平台开发接口PHP SDK完整版
  4. 7-5 排列的字典序问题 (10 分)(思路加详解全排列问题+vector容器做法)Come Baby!
  5. LC和RC滤波电路分析
  6. 你掉进过“伪敏捷”的陷阱吗?
  7. uft自动化测试工具安装步骤_自动化测试灵魂三问:是什么、为什么和做什么
  8. eureka集群 ha_EurekaServer集群配置
  9. 《Hack与HHVM权威指南》——1.1 为什么使用类型检查器
  10. json 插入数据_让繁琐的工作自动化——python处理JSON文件
  11. 企业微信api接口调用-通过手机号或微信好友添加客户
  12. 爬虫---批量下载美女图片
  13. tf2 --- 结构化数据建模流程
  14. 少儿编程微课程14:对称图形的模拟验证
  15. 使用v-cli创建项目,引入element-ui构建用户管理页面实现增删改查
  16. Quartus II各版本支持的器件
  17. 利用摄像头实现人员活动检测(python+openCV)
  18. python绘制contourf填色图,数值超出色条设定的范围时出现空白区域
  19. MySQL 8.0 新特性之检查约束(CHECK)
  20. 关于编程,鲜为人知的真相

热门文章

  1. 农产品区块链溯源:疫情催使下的农产品认知升级
  2. 想成功就不要设定目标,你信吗?
  3. Halcon 识别DataMatrix二维码
  4. java语音实现_用JAVA实现语音交互的功能(即语音聊天室的功能)
  5. 携程日处理20亿数据,实时用户行为服务系统架构实践
  6. 线上连锁线下整合的连锁电商架构 打造店店互推人人分销模式
  7. 安全策略篇 安全策略发展历程详解
  8. 局域网对战平台 linux,在Linux下可用Wine安装和运行腾讯对战平台、5E对战平台
  9. opencv-qr码识别
  10. 如何使用计算机处理文件夹,电脑打开某些文件夹提示引用了不可用位置怎么解决[多图]...