Spark-RDD

RDD是Spark的核心概念,它是不可变的分布式数据集,支持内存优先的弹性存储。RDD由分区组成,记录计算依赖,支持基于hash和range的分区,并能指定计算位置。创建RDD可通过并行化内存数据或读取外部文件。转化操作不会立即执行,仅在行动操作如count()、take()时触发实际计算,体现了Spark的懒计算和移动计算优于移动数据的理念。
摘要由CSDN通过智能技术生成

RDD概念

学习spark已经第四天了,对RDD还是云里雾里。

RDD是spark最重要的一部分,RDD的英文全名是Resilient Distributed Dataset

就是 弹性 分布式 数据集

弹性

弹性:优先考虑内存,内存不够自动去落盘

RDD是一个不可变的分布式对象集合,每个RDD都被分成多个分区,这些分区运行在集群的不同节点上。

RDD源码分析

源码

这里我们就从spark的源码入手,一个RDD包含一下内容:

  • A list of partitions

  • A function for computing each split

  • A list of dependencies on other RDDs

  • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)

  • Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

解析

  • 1、他是一个分区,分区时spark中数据集的最小单位。也就是说spark当中的数据是以分区为单位存储的,不同分区被存储不同的节点上。这也是分布式计算的基础。

  • 一个应用在各个分区上的计算。在spark当中数据和执行的操作的分开的,并且spark基于懒计算的机制,也就是在真正触发计算的行动操作出现之前,spark会存储起来对哪些数据执行哪些计算。数据和计算之间的映射关系就存储在RDD中

  • 3、RDD之间的依赖关系RDD之间存在转化关系,一个RDD可以通过转化操作转化成其他RDD,这些转化操作会被记录下来。当部分数据丢失的时候,spark可以通过记录的依赖关系重新计算丢失部分的数据( a function),而不是重新计算所有数据。

  • 4、一个分区的方法,也就是计算分区的函数。spark当中支持基于hash的hash分区方法和基于范围的range分区方法

  • 5、一个列表,存储的是存储每个分区的优先存储的位置

    通过以上五点,我们可以看出spark一个很重要的理念。即移动数据不如移动计算,也就是说在spark运行调度的时候,会倾向于将计算分发到节点上,而不是将节点的数据搜集起来计算。RDD正是基于这一理念而生的。


创建RDD

spark提供了两种方式来创建RDD,一种是读取外部的数据集,另一种是将一个已经存储在内存当中的集合进行并行化。

1、并行化:

SparkContext是整个spark的入口,相当于程序的main函数;命名sc

2、外部数据:

eg:texts = sc.textFile(“Path”)


转化操作和行动操作

RDD支持两种,一种叫做转化操作,一种叫做行动操作

执行转化操作的时候,spark会将一个RDD转化成另一个RDD。RDD中会将我们这次转化的内容记录下来,但是不会进行运算。所以我们得到的仍然是一个RDD而不是执行的结果

比如:

inputRDD = sc.textFile('path/path/log.txt')
lengthRDD = inputRDD.filter(lambda x: len(x) > 10)
errorRDD = inputRDD.filter(lambda x: 'error' in x)
unionRDD = errorRDD.union(lengthRDD)

在这里插入图片描述

最后的union会将两个RDD的结果组合起来。

无论我们执行多少次转化操作,spark都不会真正执行其中的操作,只有当我们执行行动操作时,记录下来的转化操作才会真正投入运算。像是first(),take(),count()等都是行动操作,这时候spark就会给我们返回计算结果了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值