Spark中RDD的理解-程序员宅基地

1.什么是RDD

RDDRDDSpark的计算模型 RDDResilient Distributed Dataset)叫做弹性的分布式数据集合,是Spark中最基本的数据抽象,它代表一个不可变、只读的,被分区的数据集。

操作RDD就像操作本地集合一样,数据会被分散到多台机器中(以分区为单位)。

 

 

RDDSpark中的一个基本抽象(可以理解为代理)

有了RDD,就可以像操作本地的集合一样,有很多的方法可以调用,使用方便,而无需关心底层的调度细节。

 

2.RDD操作类型

RDD中算子可分为两类:

RDD支持的两中类型的操作:

转换(Transformation):现有的RDD通过转换生成一个新的RDDlazy模式,延迟执行。

 

转换的函数:mapfilterflatmapgroupByKeyreduceBykeyaggregateByKeyunionjoincoalesce等等。

 

动作(Action):RDD上运行计算,并返回结果给驱动程序(Drive)或写入文件系统。

 

动作操作函数:reduce,collect,count,frist,take,countByKey以及foreach等等。

 

collect该方法把数据收集到driver端   Array数组类型

 

所有的transfromation只有遇到action才能执行。

 

当触发执行action之后,数据类型就不再是RDD了,数据就会存到指定的文件系统中,或者直接打印结果或者收集起来。

 

RDD操作流程示意:

 

 

RDD的运行逻辑:

下图所示,在Spark应用中,整个执行流程在逻辑上运算之间会形成有向无环图。Action算子触发之后会将所有累积的算子形成一个有向无环图,然后由调度器调度该图上的任务进行运算。

Spark的调度方式与MapReduce有所不同。Spark根据RDD之间不同的依赖关系切分形成不同的阶段(Stage),一个阶段包含一系列函数进行流水线执行。

图中的ABCDEFG,分别代表不同的RDDRDD内的一个方框代表一个数据块。数据从HDFS输入Spark,形成RDD ARDD CRDD C上执行map操作,转换为RDD DRDD BRDD F进行join操作转换为G,而在BG的过程中又会进行Shuffle。最后RDD G通过函数saveAsSequenceFile输出保存到HDFS中。

 

RDD的转换与操作:


 

wordcount实例,查看lazy特性。

只有在执行action时,才会真正开始运算,才能得到结果或储存到文件中。

3.创建RDD

1)集合并行化创建(通过scala集合创建)scala中的本地集合------> spark RDD

 

 

 

val  arr=Array1  to  10

 

val  rdd=sc.parallelizearr

 

val  rdd=sc.makeRDDarr

 

2)

//读取外部文件系统,比如HDFS

val  rdd2 = sc.textFile(“hdfs://hdp-nn-01:9000/words.txt”)

//读取本地文件

val  rdd2 = sc.textFile(“file:///root/words.txt”)

 

3)从父RDD转换成新的子RDD,最常用方式

 

调用Transformation 类的方法,生成新的RDD

 

4.RDD的分区:

rdd中和文件切片相关的概念叫做分区,也就是说对rdd进行操作,实际上是操作的rdd中的每一个分区,分区的数量决定了并行的数量。

使用rdd.partitions.size或者rdd.partitions.length查看分区数量。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mys_35088/article/details/80979873

智能推荐

mysql支持的平台和操作系统_MySQL支持的操作系统列表_MySQL-程序员宅基地

文章浏览阅读461次。我们使用GNU Autoconf,因此将MySQL移植到所有使用Posix线程和C++编译器的现代系统是可能的。(要求服务器支持线程。如果只是编译客户端代码,则只需要C++编译器)。我们主要在Linux(SuSE和Red Hat)、FreeBSD和Sun Solaris(版本8和9)上使用并开发本软件。已经报告MySQL可以在下列操作系统/线程包的组合上成功地进行编译。注意,对于很多操作系统,原生..._mysql可以运行在哪些平台

MyEclipse下安装FatJar打包工具-程序员宅基地

文章浏览阅读112次。方法一:help > software updates > Find and install > add > add remote sitename:FatJarurl:http://kurucz-grafika.de/fatjar (这个是FatJarUpdateSite)填写name和url,之后要把fatjar那项打钩,接下来就一路Next吧。方法二:..._myeclipse2020 安装不了 fatjar 插件

STM32入门-GPIO端口的八种工作模式_gpio的8种工作模式-程序员宅基地

文章浏览阅读5.7w次,点赞428次,收藏2.2k次。新手必看,超讲解详细GPIO端口的八种工作模式_gpio的8种工作模式

QGIS基本功| 8 初识数据源_qgis qml-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏10次。初次接触GIS的朋友,常常弄不清数据源(Data Source)和图层(Layer)的区别与联系,导致在数据处理和分发时出现一些问题,例如:辛辛苦苦做出了一幅漂亮的地图,为什么再次打开数据时,地图又变回丑陋的样子?怎么才能把工作成果分发给同事,让他打开数据时效果跟我本机一模一样?回答这些问题,我们需要从数据源的基本概念说起。本文从数据源和图层的区别与联系、打开数据源管理器、数据源管理器界面介绍和QGIS支持打开的数据源类型等方面,整体上初步介绍数据源相关知识。后续将陆续推出文章,详细介绍.._qgis qml

kaldi yesorno案例学习记录_local/prepare_lm.sh: line 7: 19989-程序员宅基地

文章浏览阅读270次。学习自Kaldi-yesno详解先来学习run.sh脚本#!/bin/bashtrain_cmd=“utils/run.pl”decode_cmd=“utils/run.pl”#-d filename 判断filename是否为目录,是为真,即下面的是如果waves_yesorno部署目录,去网站下载,||逻辑或,如果前面的语句执行成功,后面的就不执行了,如果前面的出问题,就异常退出(exit 0 代表正常运行程序并退出程序,exit 1 代表非正常运行导致退出程序。其实目的就是: 程序退出后, _local/prepare_lm.sh: line 7: 19989

《专题五 容器化微服务》之《第三章 云原生DevOps》之《第二节 监控》-程序员宅基地

文章浏览阅读181次。我:es的index类似kafka的topic, es的shard类似kafka的partition,副本类似kafka的副本(除了es当有多个请求需要访问同一个index时,各shard的多副本上可并行搜索;相比之下,kafka的partition只能分配给一个消费者组里的一个消费者)20:40 filebeat对k8s的支持:通过监听k8s事件,自动采集容器的标准输出。10 30+ 容器与Kubernetes里的日志,与传统主机模式下的日志有较大区别。13 55+ Filebeat采集容器化日志。

随便推点

Esp8266 进阶之路34 【外设篇③】乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。(附带Demo)_8266时钟代码 数码管-程序员宅基地

文章浏览阅读7k次,点赞5次,收藏28次。本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。4 、Es..._8266时钟代码 数码管

2024年阿里云服务器地域选择方法_地域城市分布表-程序员宅基地

文章浏览阅读639次,点赞22次,收藏20次。阿里云服务器地域选择方法,如何选择速度更快、网络延迟更低的地域节点,地域指云服务器所在的地理位置区域,地域以城市划分,如北京、杭州、深圳及上海等,如何选择地域?建议根据用户所在地区就近选择地域,用户距离地域所在城市越近,网络延迟越低,速度越快。阿里云服务器网aliyunfuwuqi.com从速度延迟、备案限制、多产品内网互通、不同地域价格等四点因素来考虑地域的选择因素,可以在阿里云CLUB中心查看当前最新的云服务器优惠券和配置报价表。

【云驻共创】云原生应用架构之企业核心业务未来架构演进路线及华为云方案_基于云原生架构构建核心业务支撑系统应用试点研究-程序员宅基地

文章浏览阅读2.6w次,点赞4次,收藏9次。文章目录前言前言本文整理自华为云社区【内容共创】活动第14期。查看活动详情:https://bbs.huaweicloud.com/blogs/336904相关任务详情:任务16.企业核心业务未来架构演进路线及华为云方案_基于云原生架构构建核心业务支撑系统应用试点研究

实验十九、利用运算电路解方程_利用运算电路求解方程的方法研究-程序员宅基地

文章浏览阅读882次。运算电路求解一元二次方程_利用运算电路求解方程的方法研究

Vue3+ElementPlus 根据路由 自动创建二级菜单_vue 项目 element新增菜单下级页面-程序员宅基地

文章浏览阅读334次,点赞5次,收藏4次。本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**_vue 项目 element新增菜单下级页面

linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;_linux按照mysql数据库配置表名不区分大小写-程序员宅基地

文章浏览阅读1.2k次。1、linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写; 2、用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写; lower_case_table_names参数详解: lower_case_table_names = 0 其_linux按照mysql数据库配置表名不区分大小写