Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大数据入门:Spark RDD基础概念

大数据入门:Spark RDD基础概念

作者头像
成都加米谷大数据
修改于 2020-12-09 09:45:14
修改于 2020-12-09 09:45:14
1K0
举报
文章被收录于专栏:大数据开发大数据开发

Spark框架的核心部分,SparkCore作为平台基础通用执行引擎,重要性自是不必多说。而在SparkCore当中,RDD作为SparkCore的核心抽象,是需要重点搞懂的概念。今天的大数据入门分享,我们就来讲讲Spark RDD入门基础。

Spark框架的核心是SparkCore,而在更深一个层面上,SparkCore的核心就是RDD。SparkCore建立在统一的抽象RDD之上,这使得Spark的各个组件可以随意集成,可以在同一个应用程序中使用不同的组件以完成复杂的大数据处理任务。

RDD设计初衷

RDD,全称Resilient Distributed Datasets,在设计之初是为了解决计算框架对不同应用场景处理效率不高的问题,比如说迭代式算法和交互式数据挖掘。在这两种应用场景中,通过将数据保存在内存中,可以将性能提高到几个数量级。

对于迭代式算法而言,比如PageRank、K-means聚类、逻辑回归等,常常需要重用中间结果;而交互式数据挖掘,常常需要在同一份数据集上运行多个即席查询。

大部分的计算框架(比如Hadoop),使用中间计算结果的方式是将其写入到一个外部存储设备(比如HDFS),这会增加额外的负载(数据复制、磁盘IO和序列化),由此会增加应用的执行时间。

RDD可以有效地支持多数应用中的数据重用,它是一种容错的、并行的数据结构,可以让用户显性地将中间结果持久化到内存中,并且可以通过分区来优化数据的存放,另外,RDD支持丰富的算子操作,用户可以很容易地使用这些算子对RDD进行操作。

RDD基本概念

本质上来说,一个RDD就是一个分布式对象集合,一个只读的、分区的记录集合。每个RDD可以分成多个分区,不同的分区保存在不同的集群节点上。

RDD是一种高度受限的共享内存模型,即RDD是只读的分区记录集合,所以也就不能对其进行修改。只能通过两种方式创建RDD,一种是基于物理存储的数据创建RDD,另一种是通过在其他RDD上作用转换操作(transformation,比如map、filter、join等)得到新的RDD。

RDD不需要被物化,它通过血缘关系(lineage)来确定其是从RDD计算得来的。另外,用户可以控制RDD的持久化和分区,用户可以将需要被重用的RDD进行持久化操作(比如内存、或者磁盘)以提高计算效率。也可以按照记录的key将RDD的元素分布在不同的机器上,比如在对两个数据集进行JOIN操作时,可以确保以相同的方式进行hash分区。

RDD主要特点

①基于内存

RDD是位于内存中的对象集合。RDD可以存储在内存、磁盘或者内存加磁盘中,但是,Spark之所以速度快,是基于这样一个事实:数据存储在内存中,并且每个算子不会从磁盘上提取数据。

②分区

分区是对逻辑数据集划分成不同的独立部分,分区是分布式系统性能优化的一种技术手段,可以减少网络流量传输,将相同的key的元素分布在相同的分区中可以减少shuffle带来的影响。RDD被分成了多个分区,这些分区分布在集群中的不同节点。

③强类型

RDD中的数据是强类型的,当创建RDD的时候,所有的元素都是相同的类型,该类型依赖于数据集的数据类型。

④懒加载

Spark的转换操作是懒加载模式,这就意味着只有在执行了action(比如count、collect等)操作之后,才会去执行一些列的算子操作。

⑤不可修改

RDD一旦被创建,就不能被修改。只能从一个RDD转换成另外一个RDD。

⑥并行化

RDD是可以被并行操作的,由于RDD是分区的,每个分区分布在不同的机器上,所以每个分区可以被并行操作。

⑦持久化

由于RDD是懒加载的,只有action操作才会导致RDD的转换操作被执行,进而创建出相对应的RDD。对于一些被重复使用的RDD,可以对其进行持久化操作(比如将其保存在内存或磁盘中,Spark支持多种持久化策略),从而提高计算效率。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 编程 | 连载 08 - 列表与元组操作
sort 函数的功能是可以对当前列表按照一定的归类进行排序,该函数有两个参数需要传入,其中一个可以不传,另外一个时排序规则 reverse=Tue 或者 False,默认是 False 既按照升序排列,True 则是按照降序排列
RiemannHypothesis
2022/09/26
2810
Python 编程 | 连载 08 - 列表与元组操作
Python学习记录day2
Python是一门基于虚拟机的语言,pyc 是由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python 的虚 拟机来执行的。
py3study
2020/01/13
4520
python---基础之模块,列表,元组,字典
1、 模块 写模块的时候尽量不要和系统自带的模块的名字相同 调用模块的时候,会先在当前目录下查找是否有这个模块,然后再会如python的环境变量中查找 a.模块1:sys 代码如下: 1 import
coders
2018/01/04
1.2K0
python---基础之模块,列表,元组,字典
python list tuple d
name = ["aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii"]
py3study
2020/01/13
5570
Python | 一文看懂Python列表、元组和字符串操作
列表(List)是Python中非常重要的内置数据类型。列表由一系列元素组成,所有的元组被包含在一对方括号中。列表被创建将后,可以执行添加、删除、修改操作。
咸鱼学Python
2020/11/20
4.7K0
Python | 一文看懂Python列表、元组和字符串操作
Python07 列表、元组
可以看到name2没有因为name1的修改而改变,name2根据定义的变量位置,从上到下取最近的name1来copy
py3study
2020/01/08
6320
面试复习-Python-数据类型
Python 是一种高级编程语言,具有丰富的数据类型。了解这些数据类型对于有效地编写 Python 代码至关重要。以下是对 Python 主要数据类型的详细介绍。
宅蓝三木
2024/10/09
1050
python笔记day2
name = {'name1':'Carrick','name2','Tina'}
py3study
2020/01/08
8960
python面试题搜集:史上最全python面试题详解(一)
得到的最大数字在3925-3929之间浮动,这个是和计算机有关系的,不然也不会是一个浮动的数字了(数学逻辑讲求严谨)
宇宙之一粟
2020/10/26
1.4K0
Python列表最常见的问题【总结】
列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,本文总结了一些python列表最常见的问题,希望能对大家有帮助。
一墨编程学习
2018/12/14
7610
Python基础(三) | Python的组合数据类型
d.get(key,default) 从字典d中获取键key对应的值,如果没有这个键,则返回default
timerring
2022/09/27
2.8K0
Python基础(三) | Python的组合数据类型
Python内置容器(1)——列表,元组
---------------------------------------------------------------------------
py3study
2020/01/08
4980
python数据类型,格式话输出
 一.程序交互 name = input(“你的名字是:”) #用户输入,输入的任何东西都存储成str(字符串类型)的形式 二.注释的重要性   以后动辄几千行代码的时候,回过头再去看的时候,发现自己都看不懂了,在工作中还会大家一起合作完成代码,不写注释的话,更难以交流了。 单行注释直接在句首写上#就好了 多行注释可用快捷键ctrl+/,或者用三个引号括起来''' 99999999                          12345789                      
py3study
2020/01/19
1.3K0
python基础随笔
一: 作用域 对于变量的作用域,只要内存中存在,该变量就可以使用。 二:三元运算 name = 值1 if 条件 else 值2 如果条件为真:result = 值1 如果条件为假:result = 值2 方式一: name = 'ccc' if 1==1:     name = 'sb' else:     name = 'sb' 方式二: name = 'sb' if 1==1 else '2b' 实例: name = raw_input('your name: ') reslut = 'sb' if 
洗尽了浮华
2018/01/22
7850
python基础随笔
python_列表_元组_字典
insert(index, object) 在指定位置index前插入元素object
以某
2023/03/07
2.5K0
python_列表_元组_字典
python入门与实战--列表
python语言中,列表(list)是个很重要的概念。列表能够将多个元素组合起来(组合是一种很重要的创新方式),每个元素用逗号隔开,可以对这些元素做统一的处理,如:
用户9875047
2022/07/04
3490
python入门与实战--列表
Python基础三
不可变的数据类型公用,可变的数据类型重新开辟一个空间,对源数据进行修改,深拷贝的内容不进行改变
changxin7
2019/09/10
1.4K0
python3 列表 元组 字典 文件
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
py3study
2020/01/06
9700
Python 基础 (-)
Python 单词是“大蟒蛇”的意思。但是龟叔不是喜欢蟒蛇才起这个名字,而是正在追剧:英国电视喜剧片《蒙提·派森的飞行马戏团》(Monty Python and the Flying Circus)。
Dar_Alpha
2018/10/09
5.1K0
手撕Python之散列类型
数据顺序发生变化,每个数据的下标也随之变化,如何保证数据顺序变化前后能使用同一种方法查找数据呢?
Undoom
2024/09/23
1470
手撕Python之散列类型
相关推荐
Python 编程 | 连载 08 - 列表与元组操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档