Spark快速大数据分析之RDD基础

本文介绍了Spark中的RDD,它是不可变的分布式对象集合。RDD可以通过读取外部数据集或并行化驱动器程序中的对象集合创建。文章详细讨论了RDD的转化和行动操作,包括转化操作的惰性求值特性,以及如何通过persist()持久化RDD以提高效率。还涵盖了创建RDD、常见操作如map、filter、reduce和fold,以及如何在Python和Scala中传递函数给Spark。
摘要由CSDN通过智能技术生成

RDD基础

  • Spark 中的RDD 就是一个不可变的分布式对象集合。每个RDD 都被分为多个分区,这些分区运行在集群中的不同节点上。RDD 可以包含Python、Java、Scala中任意类型的对象,甚至可以包含用户自定义的对象。

  • 用户可以使用两种方法创建RDD:读取一个外部数据集,或在驱动器程序里分发驱动器程序中的对象集合(比如list 和set)。

  • RDD支持两种类型的操作:转化操作和行动操作。转化操作会由一个RDD 生成一个新的RDD。行动操作会对RDD计算出一个结果,并把结果返回到驱动器程序中,或把结果存储到外部存储系统(如HDFS)中。

  • 转化操作和行动操作的区别在于Spark 计算RDD 的方式不同。

  • 默认情况下,Spark的RDD会在你每次对它们进行行动操作时重新计算。如果想在多个行动操作中重用同一个RDD,可以使用RDD.persist()让Spark 把这个RDD 缓存下来。在第一次对持久化的RDD 计算之后,Spark 会把RDD 的内容保存到内存中(以分区方式存储到集群中的各机器上),这样在之后的行动操作中,就可以重用这些数据了。

  • cache() 与使用默认存储级别调用persist() 是一样的。

总的来说,每个Spark 程序或shell 会话都按如下方式工作。
1. 从外部数据创建出输入RDD。
2. 使用诸如filter() 这样的转化操作对RDD 进行转化,以定义新的RDD。
3. 告诉Spark 对需要被重用的中间结果RDD 执行persist() 操作。
4. 使用行动操作(例如count()和first()等)来触发一次并行计算,Spark 会对计算进行优化后再执行。

创建RDD

Spark 提供了两种创建RDD的方式:读取外部数据集,以及在驱动器程序中对一个集合进行并行化

创建RDD 最简单的方式就是把程序中一个已有的集合传给SparkContextparallelize()方法。但除了开发原型和测试时,这种方式用得并不多,毕竟这种方式需要把你的整个数据集先放在一台机器的内存中。更常用的方式是从外部存储中读取数据来创建RDD。如:
val lines = sc.textFile("/path/to/README.md")

RDD操作

RDD 支持两种操作:转化操作和行动操作。RDD 的转化操作是返回一
个新的RDD 的操作,比如map()filter(),而行动操作则是向驱动器程序返回结果或把结果写入外部系统的操作,会触发实际的计算,比如count()first()。它们的返回值类型:转化操作返回的是RDD,而行动操作返回的是其他的数据类型。

转化操作

RDD的转化操作是返回新RDD的操作。转化出来的RDD是惰性求值的,只有在行动操作中用到这些RDD 时才会被计算。许多转化操作都是针对各个元
素的,也就是说,这些转化操作每次只会操作RDD 中的一个元素。不过并不是所有的转
化操作都是这样的。

你从已有的RDD 中派生出新的RDD,Spark 会使用**谱系
图(lineage graph)来记录这些不同RDD 之间的依赖关系**。Spark 需要用这些信息来按需
计算每个RDD,也可以依靠谱系图在持久化的RDD 丢失部分数据时恢复所丢失的数据

行动操作

行动操作是第二种类型的RDD 操作,它们会把最终求得的结
返回到驱动器程序,或者写入外部存储系统中。由于行动操作需要生成实际的输出,它
们会强制执行那些求值必须用到的RDD 的转化操作。
一些常用的行动操作函数:
- count():统计返回结果
- take():来收集RDD 中的一些元素
- collect(): 用来获取整个RDD 中的数据。如果你的程序把RDD 筛选到一个很小的规模,并且你想在本地处理这些数据时,就可以使用它。记住,只有当你的整个数据集能在单台机器的内存中放得下时,才能使用collect(),因此,collect() 不能用在大规模数据集上。
- saveAsTextFile()、saveAsSequenceFile() :规模较大的RDD 不能通过collect()收集到驱动器进程中时,可以使用saveAsTextFile()、saveAsSequenceFile(),或者任意的其他行动操作来把RDD 的数据内容以各种自带的格式保存起来,写到诸如HDFS 或Amazon S3 这样的分布式的存储系统中。

注:每当我们调用一个新的行动操作时,整个RDD都会从头开始计算。要避免这种低效的行为,用户可以将中间结果持久化。

惰性求值

RDD 的转化操作都是惰性求值的。这意味着在被调用行动操作之前Spar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值