作者:韩信子@ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/84
本文地址:http://www.showmeai.tech/article-detail/174
申明:版权所有,转载请分割平台与作者并注明出处
1.RDD介绍
要把握基于Spark的大数据处理操作,大家首先要理解Spark中的一个外围数据概念:RDD。
- 《更多材料 → 数据迷信工具速查 | Spark使用指南(RDD版)》
1)RDD介绍
RDD,全称为Resilient Distributed Datasets(弹性分布式数据汇合),是一个容错的、并行的数据结构,能够让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰盛的操作来操作这些数据。
RDD(弹性分布式数据汇合)是Spark的根本数据结构,Spark中的所有数据都是通过RDD的模式进行组织。
- RDD是不可变的数据汇合,每个分区数据是只读的。
- RDD数据集要做逻辑分区(相似hadoop中的逻辑切片split),每个分区能够独自在集群节点进行计算。
- RDD数据集中的数据类型能够蕴含任何java类型、scala类型、python类型或者自定义的类型。
- RDD善于的畛域:迭代式的数据处理,比方机器学习。
2)RDD的5个属性
每个RDD有5个次要的属性:
- 一组分片(partition),数据集的根本组成单位。
- 一个函数,计算每个分片。
- 对parent RDD的依赖,形容RDD之间的lineage。
- 一个Partitioner,对于key-value的RDD。
- 一个列表,存储存取每个partition的preferred地位。例如对于一个HDFS文件来说,存储每个partition所在的块的地位。
3)RDD与Spark工作
在Spark分布式数据处理工作中,RDD提供数据,供工作解决。很多时候hadoop和Spark联合应用:hadoop提供hdfs的分布式存储,Spark解决hdfs中的数据。
咱们以 sc.textFile("hdfs://path/to/file")
模式生成RDD时,Spark就曾经算好了数据的各个切片(也叫分区),并把分区信息放在了一个列表(名单)里,这个名单就属于RDD自带的其中一个属性。
- RDD不蕴含理论要解决的数据,而是在RDD中的分区名单中载明切片的信息。
- 数据曾经在Hadoop的数据节点上了,只有在RDD中表明分区对应的数据所在位置、偏移量、数据长度即可,就相似元数据。
RDD在被散发到每个执行计算的工作节点后,每个工作节点会依据元数据信息获取本身节点负责计算的分区数据,并把数据放到本节点的内存当中,而后对数据进行计算。
- 每个分区由一个节点来计算,换句话说就是每个工作只计算RDD的其中一个分区。
个别咱们会把数据所在的节点和Spark的计算节点配成同一个主机,这样就实现了数据本地化。
- 在worker节点将要运行Spark的计算工作时,只须要从本地加载数据,再对数据使用Spark的计算函数,就不须要从别处(例如近程主机)通过网络传输把须要计算的数据拿过去,从而防止了低廉的网络传输老本。“宁肯挪动函数,也不要挪动数据”。
2.RDD创立形式
1)创立RDD的3种形式
RDD的3种创立形式如下图所示(以pyspark代码为例):
2)从内部数据创立RDD
spark也反对从多种内部数据源读取数据,包含HDFS、S3、Hbase、MongoDB等,如下图所示:
3.RDD播送与累加器
1)共享变量
在Spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在近程节点下面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立正本。
这些变量会被复制到每台机器上,并且这些变量在近程机器上的所有更新都不会传递回驱动程序。
通常跨工作的读写变量是低效的,然而,Spark还是为两种常见的应用模式提供了两种无限的共享变量:
- 播送变量(broadcast variable)
- 累加器(accumulator)
2)播送变量
为什么要将变量定义成播送变量?
在分布式计算中,由Driver端散发大对象(如字典、汇合、黑白名单等),个别,如果这个变量不是播送变量,那么每个task就会散发一份。在task数目非常多的状况下,Driver的带宽会成为零碎的瓶颈,而且会大量耗费task服务器上的资源。
如果将这个变量申明为播送变量,那么常识每个executor领有一份,这个executor启动的task会共享这个变量,节俭了通信的老本和服务器的资源
3)累加器
为什么要将变量定义为累加器?
在Spark应用程序中,异样监控、调试、记录合乎某个性的数据数目,这些需要都须要用到计数器。
如果变量不被申明为累加器,那么被扭转时不在Driver端进行全局汇总。即在分布式运行时每个task运行的只是原始变量的一个正本,并不能扭转原始变量的值。
然而,当这个变量被申明为累加器后,该变量就会有分布式计数的性能。
4.RDD transformation与action
要对大数据进行解决,咱们须要应用到一系列Spark RDD上能够变换与操作的算子,咱们来重点了解一下spark的RDD transformation和action。
1)transformation与action
transformation操作针对已有的RDD创立一个新的RDD。
- 例如,map就是一种transformation操作。它用于将已有RDD的每个元素传入一个自定义的函数,并获取一个新的元素,而后将所有新元素组成一个新的RDD。
action次要是对RDD进行最初的操作(如遍历、reduce、保留到文件等),并能够返回后果给Driver程序。
- 例如,reduce就是一种action操作。它用于对RDD中的所有元素进行聚合操作,并获取一个最终的后果,而后返回给Driver程序。
2)高频RDD算子图解
map与flatMap
filter与distinct
sort与sortBy
sample与takeSample
union与intersection
groupby与cartesian
join与glom
collect与reduce
top与count
takeOrdered与take
reduceByKey与collectAsMap
5.参考资料
- 数据迷信工具速查 | Spark使用指南(RDD版) http://www.showmeai.tech/article-detail/106
- 数据迷信工具速查 | Spark使用指南(SQL版) http://www.showmeai.tech/article-detail/107
- 耿嘉安,Spark内核设计的艺术:架构设计与实现, 机械工业出版社,2018
- 郭景瞻,图解Spark:核心技术与案例实战,电子工业出版社
- Spark的根本数据结构RDD介绍: https://blog.csdn.net/qq\_31598113/article/details/70832701
- Spark RDD(Resilient Distributed Datasets)论文:http://spark.apachecn.org/paper/zh/spark-rdd.html
ShowMeAI相干文章举荐
- 图解大数据 | 导论:大数据生态与利用
- 图解大数据 | 分布式平台:Hadoop与Map-reduce详解
- 图解大数据 | 实操案例:Hadoop零碎搭建与环境配置
- 图解大数据 | 实操案例:利用map-reduce进行大数据统计
- 图解大数据 | 实操案例:Hive搭建与利用案例
- 图解大数据 | 海量数据库与查问:Hive与HBase详解
- 图解大数据 | 大数据分析开掘框架:Spark初步
- 图解大数据 | Spark操作:基于RDD的大数据处理剖析
- 图解大数据 | Spark操作:基于Dataframe与SQL的大数据处理剖析
- 图解大数据 | 综合案例:应用spark剖析美国新冠肺炎疫情数据
- 图解大数据 | 综合案例:应用Spark剖析开掘批发交易数据
- 图解大数据 | 综合案例:应用Spark剖析开掘音乐专辑数据
- 图解大数据 | 流式数据处理:Spark Streaming
- 图解大数据 | Spark机器学习(上)-工作流与特色工程
- 图解大数据 | Spark机器学习(下)-建模与超参调优
- 图解大数据 | Spark GraphFrames:基于图的数据分析开掘
ShowMeAI系列教程举荐
- 图解Python编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解AI数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程