Spark基础入门之深入理解RDD

1. 什么是RDD?(**弹性分布式数据集**,是spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合)

- **R(Resilient)**: 表示弹性,rdd内部的元素可以存在磁盘也可存在内存中

- **D(Distributed)**: 它内部的元素进行了分布式存储,方便后期的分布式计算

- **D(Dataset)**: 它就是一个集合,存储很多数据

2. RDD的五大属性

1)A list of partitions, **数据集的基本组成单位**

```

一个RDD有很多分区,每个分区内部包含了该rdd的部分数据。

```

2)A function for computing each split, **一个计算每个分区的函数**

```

Spark中的RDD的计算是以分区为单位的,每个RDD都会实现compute计算函数以达到整个目的。

```

3)A list of dependencies on other RDDs, **一个RDD可以依赖其他多个rdd**

```

这里涉及到rdd与rdd之间的依赖关系,spark的容错机制就是根据这个特性而来。

```

4)Optionally, a partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned), **一个Partitioner,即RDD的分区函数(可选项)**

```

当前Spark(版本)中实现了两种类型的分区函数:HashPartitioner&RangePartitioner.只有对于key-value的RDD,并且产生shuffle,才会有partitioner,非key-value的RDD的partitioner的值是None.

```

5)Optionally,a list of preferred locations to compute each split on (e.g. block locations for an HDFS file), **一个列表,存储每个partition的优先位置(可选项)**

```

这里涉及到数据的本地性,数据块位置最优。spark任务在调度的时候会优先考虑存有数据的节点开启计算任务,减少数据的网络传输,提升计算效率。

```

3. RDD的创建方式

- 通过已经存在的scala集合去构建

```

val rdd1=sc.parallelize(List(1,2,3,4))

val rdd2=sc.parallelize(Array("hadoop","hive","spark"))

val rdd3=sc.makeRDD(List(1,2,3,4))

```

- 加载外部的数据源去构建

```

val rdd1=sc.textFile("/words.txt")

```

- 从已经存在的rdd进行转换生成一个新的rdd

```

val rdd2=rdd1.flatMap(_.split(" "))

val rdd3=rdd2.map((_,1))

```

4. RDD的算子分类

- transformation(转换)

- 根据已经存在的rdd转换生成一个新的rdd,它是延迟加载,它不会立即执行

- 例如

- map/flatMap/reduceByKey等

- action(动作)

- 它会真正触发任务的执行

- 将rdd的计算的结果数据返回给Driver端,或者是保存结果数据到外部存储介质中

- 例如

- collect/saveAsTextFile等

5. RDD常见的算子操作说明

- **transformation算子**

转换 |含义 |

--- | --- |

map(func) | 返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成 |

filter(func)|返回一个新的RDD,该RDD经过func函数计算后返回值为true的输入元素组成|

flatMap(func)|类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该反回一个序列,而不是单一元素)

mapPartitions(func)|类似于map,但独立在RDD的每一个分片上运行,因此在类型为T的RDD上运行时,func函数类型必须是Iterator[T]=>Iteator[U} |

mapPartitionsWithIndex(func)| |

union(otherDataset)| |

intersection(other Datesel)| |

- action算子

6. RDD常用的算子操作演示(略)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变...
    姚兴泉阅读 1,416评论 0 6
  • Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变...
    达微阅读 884评论 0 6
  • Spark大数据分析实战 1.4弹性分布式数据集本节将介绍弹性分布式数据集RDD。Spark是一个分布式计算框架,...
    Albert陈凯阅读 881评论 0 0
  • (1)浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同问题症状:随便写几个标签,不加样式控制的情况下,各...
    ctmdtutu阅读 244评论 0 1
  • 毕业两年来,多久没看书,多久没思考,多久没坚持做一件事,多久没爱上做一件事。时间过得飞快,快到没给我留下一些可以回...
    潇潇ers阅读 168评论 0 2