[Spark快速大数据分析]Spark基础
Posted coding-gaga
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Spark快速大数据分析]Spark基础相关的知识,希望对你有一定的参考价值。
Spark分布式执行涉及的组件
每个Spark应用都由一个驱动程序来发起集群上的各种并行操作,驱动程序通过一个SparkContext对象访问Spark;驱动程序管理多个执行器节点,可以用SparkContext来创建RDD。
RDD(Resilient Distributed Dataset:弹性分布式数据集)
RDD特点
- Spark中,对数据的所有操作不外乎:创建RDD、转化已有RDD、调用RDD操作进行求值。
- Spark会自动将RDD中的数据分发到集群上,并将操作并行化执行。
- Spark中的RDD是一个不可变的分布式对象集合
RDD两种创建方法
- 读取一个外部数据集。如
sc.textFile("readme.md")
- 在驱动程序里分发驱动程序的对象集合(如list、set)。即把程序中一个已有集合传递给SparkContext的parallelize()方法。这种方法用的并不多,因为需要把整个数据集先放在一台机器的内存中。
RDD支持两种类型的操作——之一:转化操作(transform)
- 返回一个新的RDD的操作。
- 许多转化操作是针对各个元素的,但并不是所有的转化操作都是这样的。
- 常用转化操作
filter()
:接收一个函数,并将RDD中满足该函数的元素组成新的RDD。 - 常用转化操作
map()
:接收一个函数,把函数作用于RDD每个元素,所有函数返回结果组成了新的RDD。 - 还有一些伪集合操作:RDD中最常缺失的集合属性就是元素的唯一性。可以用
RDD.distinct()
来生成一个只包含不同元素的新RDD。但distinct的开销很大,因为所有数据需要经过网络进行混洗(shuffle).
RDD支持两种类型的操作——之二:行动操作 (action)
- 向驱动器程序返回结果或把结果写入外部系统的操作,会触发实际的计算。默认情况下,Spark的RDD会在每次对它们进行行动操作时重新计算。如果想在多个行动操作时重用同一个RDD,可以使用
RDD.persist()
把这个RDD缓存起来(持久化)。 - RDD有一个
collect()
,可以用来获取整个RDD中的数据,但这要求RDD的数据是较小规模的。 - 常用行动函数
reduce()
:接收一个函数作为参数,这个函数要操作两个相同类型的RDD数据并返回一个同样类型的新元素。一个简单的例子就是函数“+”。 - 比如
count()
RDD支持两种类型的操作——相关
- 转化操作和行动操作的区别:计算RDD的方式不同:Spark只会惰性计算RDD:即所有转化操作只有第一次在一个行动操作中用到时,才会真正计算涉及到的转化和行动操作。
- 惰性求值:“我们不应把RDD看作存放着特定数据的数据集,而最好把每个RDD当作我们通过转化操作构建出来的、记录如何计算数据的指令列表”
以上是关于[Spark快速大数据分析]Spark基础的主要内容,如果未能解决你的问题,请参考以下文章