一、持久化
1、什么是持久化,为什么要持久化
Spark中最重要的功能之一是跨操作在内存中持久化(或缓存)数据集。当您持久化RDD时,每个节点将其计算的任何分区存储在内存中,并在该数据集(或从该数据集派生的数据集)上的其他操作中重用这些分区。这使得未来的行动更快(通常超过10倍)。缓存是迭代算法和快速交互使用的关键工具。
2、如何进行持久化
持久化的方法就是rdd.persist()或者rdd.cache()
3、持久化策略
可以通过persist(StoreageLevle的对象)来指定持久化策略
rdd.persist(StorageLevel.MEMORY_ONLY)
持久化策略 | 含义 |
---|---|
MEMORY_ONLY(默认) | rdd中的数据,以未经序列化的java对象格式,存储在内存中。如果内存不足,剩余的部分不持久化,使用的时候,没有持久化的那一部分数据重新加载。这种效率是最高,但是是对内存要求最高的。 |
MEMORY_ONLY_SER | 就比MEMORY_ONLY多了一个SER序列化,保存在内存中的数据是经过序列化之后的字节数组,同时每一个partition此时就是一个比较大的字节数组。 |
MEMORY_AND_DISK | 和MEMORY_ONLY相比就多了一个,内存存不下的数据存储在磁盘中 |
MEMEORY_AND_DISK_SER | 比MEMORY_AND_DISK多了个序列化 |
DISK_ONLY | 就是MEMORY_ONLY对应,都保存在磁盘,效率太差,一般不用。 |
xxx_2 | 就是上述多个策略后面加了一个_2,比如MEMORY_ONLY_2,MEMORY_AND_DISK |