您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
Spark核心之弹性分布式数据集RDD
 
   次浏览      
 2019-8-21
 
编辑推荐:
本文来自csdn,通过本文的学习你将RDD理解为一个大的集合,将所有数据都加载到内存中,方便进行多次重用。

1. RDD概述

1.1 什么是RDD

(1)RDD(Resilient Distributed Dataset)弹性分布式数据集,它是Spark的基本数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。

(2) 具有数据流模型的特点:自动容错、位置感知性调度、可伸缩性。

(3) 查询速度快:在执行多个查询时,可以显示的将工作集缓存到内存中,后续的查询能够重用缓存的工作集。

1.2 RDD的属性

打开Spark源代码,源码的注释中对RDD的描述如下图。

(1) A list of partitions

一系列的分区

(2) A function for computing each split

每个函数作用于每一个分区

(3) A list of dependencies on other RDDs

RDD与RDD之间有依赖关系(宽依赖、窄依赖)

(4) Optionally, a Partitioner for key-value RDDs(e.g. to say that the RDD is hash-partitioned)

如果RDD是key-value形式的,会有一个分区器(Partioner)作用在这个RDD,分区器会决定该RDD的数据放在哪个子RDD的分区上

(5) Optionally, a list of preferred locations to compute each splite on (e.g. block locations for an HDFS file)

在计算每一个分区时,会有一个优先的位置,一个列表存储每个Partition的优先位置

2. RDD编程API

2.1 RDD的算子有两种类型,

(1) Transformation: 不会马上计算结果,只会记住每个应用到基础数据集上的转换操作,只有发生一个需要返回结果给Driver的动作时,才会真正触发计算。即:RDD中所有的转换操作都是延迟加载的,能让Spark更有效率的运行。

(2) Action:会立即触发运算

2.2 常用的算子

对算子的更详细使用解释请参考我的另一篇博文:

博文地址:https://blog.csdn.net/xin93/article/details/80546765

2.2.1Transformation

2.2.2 常用的Action算子

3. RDD的依赖关系

3.1 窄依赖

每个父RDD的Partition最多被子RDD的一个Partition使用,即:独生子女

3.2宽依赖

宽依赖是Spark划分Stage的依据。每个父RDD的Partition被子RDD的多个Partition使用,即:有多个子女

关于Spark源码中是如何切分Stage的,请参考我的另一篇博文:

博文地址:https://blog.csdn.net/xin93/article/details/80674497

3. RDD的缓存

RDD提供两种方法进行缓存 persist( ) 和 cache( ),这两种方法不会立即进行缓存,而是在后面触发了action计算时才会将RDD真正缓存在计算节点的内存中供后面使用。

通过查看Spark源代码,详细如下图:

可以看到,cache( )方法实际上也是调用persist( )方法实现的缓存功能。而默认的存储级别是StorageLevel.MEMORY_ONLY,也就是只在内存中存储一份。

在源码中还提供了如下种类的缓存方式可供用户使用。

 

   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训