作者:韩信子@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数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程