Spark RDD(三)

1. 前言

RDD(Resilient Distributed Datasets)称为弹性分布式数据集,是Spark的运行时(Spark Runtime)内核实现,一个RDD对象中可以包含多个Partition,Spark应用运行时其每个Partition都对应着一个具体的任务,Spark基于RDD的内核实现主要涵盖了:数据源、调度器两部分。

2. 数据源

Spark处理的数据源可以是HDFS、Hive、HBase、S3、MySQL、Oracle等;处理之后的数据可被输出到上述存储器以及当前的控制台终端。

3. 调度器

Yarn:是Apache组织基于MapReduce算法的一套调度框架
Mesos:是Apache Spark默认的一套基于资源管理算法的调度框架
AWS:是亚马逊旗下的一套分布式系统资源调度框架
RDD其底层存储是按照分区(partition)方式进行的,可以使用SparkContext来创建,而SparkContext是Spark集群操作的入口。若是在Spark-Shell下操作,则Spark会自动创建一个基于已有配置的默认SparkContext对象,若是编写作业Jar,则须自己手动创建。
从RDD的实现逻辑来看,Spark操作RDD的过程类似于MapReduce操作HDFS的过程,但Spark在操作过程中会缓存在中间步骤的数据。Spark的Stage有以下几点缓存特征:

  1. 若Spark应用中的某个计算步骤非常耗时,则会缓存该步骤的计算结果。
  2. 若Spark应用的计算步骤链很长,则会增加对缓存步骤计算结果的频次。
  3. shuffle到其他节点上的数据会被shuffle到的目标节点缓存一次,以减少不必要的I/O次数。
  4. 从一个作业切换到下一个作业将会发生一次checkpoint操作。在此,checkpoint操作之前会缓存上一个作业的中间结果,checkpoint操作会将数据放置于磁盘文件系统中以保证数据不发生丢失。

4. RDD 编程接口

4.1 数据源自于集合的接口

  1. parallelize:将内存中的集合对象包装成Spark中的RDD对象
  2. createDataFrame:将内存中的集合对象包装成Spark中的DataFrame对象。

4.2 数据源自于RDD的接口

collect:将RDD对象转换成Java集合类型的List对象
createDataFrame:将RDD对象转换成DataFrame对象

4.3 数据源自于DataFrame的接口

  1. javaRDD:将DataFrame对象转换成Java API 中的RDD对象
  2. collectAsList:将DataFrame对象转换成Java API中的List集合对象

Spark的编程入口根据不同的子系统由不同的接口实现
3. SparkContext:基于RDD内核的原生接口实现,该接口是Spark其他入口的实现基础
4. SqlContext:基于SparkContext的一种SQL子系统实现,主要用于Spark SQL子系统中
5. StreamingContext:基于SparkContext的一种流式子系统实现,主要用于SparkContext子系统中
6. HiveContext:基于SqlContext的一种HQL子系统实现,主要用于底层存储为Hive的子系统中

5. RDD操作

Spark常用的算子函数

函数作用
textFile该函数返回一个RDD[String]类型的对象,仅执行数据抽象,并不立即执行数据的读取操作,数据的读取操作会延迟到执行action动作时才发生。因此textFile函数属于一种transformation动作。
count返回数据集中的记录数量,会启动一个action,action是指Spark会在底层启动作业或任务的计算操作。而转换仅实现数据的封装和抽象
map该函数将集合中的各个元素映射为指定的对象,然后返回一个新的RDD集合对象
flatMap该函数处理DataSet集合中的每一行,将每一行得到的集合元素释放到最外层集合中。此函数完成调用后将产生一个新的RDD对象结果集,该函数会深层次递归处理子级元素并将其提取到最外层的集合对象中去
reduceBykey该函数将数据集中元组的第一个元素作为Key进行分组,同时递归迭代和归并函数中的两个参数
sortByKey该函数根据数据集中元组的第一个参数进行排序处理,通过第二个参数指定并行度
saveAsTextFile该函数将数据集作为文本格式存储到参数指定的目录下
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值