理解Spark-RDD持久化

1.Spark中最重要的功能之一是跨操作在内存中持久化(或缓存)数据集。当数据持久保存在RDD时,每个节点都会存储它在内存中计算的任何分区,

并在该数据集(或从中派生的数据集)的其他操作中重用它们。这使得特性函数的Action更快(通常超过10倍)。缓存是迭代算法和快速交互式使用的关键工具。

 

2.可以使用persist()或cache()方法标记要保留的RDD。 第一次在动作中计算它,它将保留在节点的内存中。

 Spark的缓存是容错的 - 如果丢失了RDD的任何分区,它将使用最初创建它的转换自动重新计算。

 

3.每个持久化RDD可以使用不同的存储级别进行存储。

例如,允许您将数据集保留在磁盘上,将其保留在内存中,但作为序列化Java对象(以节省空间),跨节点复制它。

通过将StorageLevel对象(Scala,Java,Python)传递给persist()来设置这些级别。

cache()方法是使用默认存储级别的简写,即StorageLevel.MEMORY_ONLY(在内存中存储反序列化的对象)。

完整的存储级别是:

 

Storage Level

Meaning

MEMORY_ONLY

将RDD存储为JVM中的反序列化Java对象。 如果RDD不适合内存,则某些分区将不会被缓存,并且每次需要时都会重新计算。 这是默认级别。

MEMORY_AND_DISK

将RDD存储为JVM中的反序列化Java对象。 如果RDD不适合内存,请存储不适合磁盘的分区,并在需要时从那里读取它们。

MEMORY_ONLY_SER 

(Java

你可能感兴趣的:(大数据挖掘与大数据应用案例,Scala,Java,Python)