RDD是什么
就是一个集合
在使用的时候,就当做为Scala集合类中List列表
实质
分布式 存储数据 集合
abstract class RDD[T: ClassTag]
A Resilient(弹性) Distributed(分布式) Dataset (RDD)
Represents(代表) an immutable(不可变), partitioned(分区) collection of elements that can be operated(处理) on in parallel(并行)
将数据划分为很多分区(partitioned),不同分区的数据存在在不同的机器里面,每个分区的数据可以被一个Task进程处理分析
This class contains the basic operations available on all RDDs, such as map
, filter
, and persist
所有的RDD都一些基本的操作,比如map,filter,persist
PairRDDFunctions contains operations available only on RDDs of key-value pairs, such as groupByKey
and join
;
RDD中的类型是键值对(二元组),RDD隐式转换PairRDDFunctions,PairRDDFunctions方法我们就可以用,比如有groupByKey,reduceByKey,join
- Internally, each RDD is characterized by five main properties:
-
- A list of partitions 分区列表
-
- A function for computing each split 每一个分片可以被一个函数处理(并行)
-
- A list of dependencies on other RDDs
一个RDD依赖于其他RDD(RDD怎么来)
查看依赖
println(wordCountRDD.toDebugString)
- A list of dependencies on other RDDs
-
- Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
可选,如果RDD的值是二元组,你可以指定分区
- 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)
可选,最优的路径中读取分片数据
- Optionally, a list of preferred(最优) locations to compute each split on (e.g. block locations for an HDFS file)
RDD创建方式
RDD中函数的分类
转换函数Tansformation
一个RDD调用函数之后 转换为另外一个RDD
map,filter,reducBykey
action函数
一个RDD调用函数之后,不会转换为一个RDD,触发一个Job的执行
比如
count ->Long
first -> 第一条数据
take ->获取前几条数据
top->获取前几条数据(排序)
foreach ->打印所有的数据
saveAsTextFile ->保存数据到文件
持久化persisitent.
def persist(newLevel: StorageLevel)
def unpersist(blocking: Boolean = true)
class StorageLevel private(
private var _useDisk: Boolean, //磁盘
private var _useMemory: Boolean, //内存
//JVM内存中tachyon(基于内存的分布式文件系统)
private var _useOffHeap: Boolean, /
private var _deserialized: Boolean, 反序列化
private var _replication: Int = 1) //副本个数
extends Externalizable
什么情况下,RDD数据需要进行持久化呢???
(1)某个RDD数据,被多次使用
重复RDD
(2)某个RDD数据来自不易,使用超过1次
经过复杂的处理得到RDD
(3)通常选择的策略
MEMORY_ONLY_2 -如果内存足够
MEMORY_AND_DISK_SER_2 -如果内存不够,先内存后磁盘,