Spark操作——控制操作

  • cache(): RDD[T]

  • persist(): RDD[T]

  • persist(level: StorageLevel): RDD[T]

cache和persist操作都是對RDD進行持久化,其中cache是persist採用MEMORY_ONLY存儲級別時的一個特例,

scala> var rdd = sc.textFile("/Users/lyf/Desktop/data.txt")
rdd: org.apache.spark.rdd.RDD[String] = /Users/lyf/Desktop/data.txt MapPartitionsRDD[57] at textFile at <console>:24

scala> rdd.cache()
res38: org.apache.spark.rdd.RDD[String] = /Users/lyf/Desktop/data.txt MapPartitionsRDD[57] at textFile at <console>:24

// 第一次計算行數,這裏只能從本地文件讀取數據,不能從內存
scala> rdd.count()
res39: Long = 4

// 第二次計算,則是從內存中讀取數據
scala> rdd.count()
res40: Long = 4

scala> var rdd = sc.textFile("/Users/lyf/Desktop/data.txt")
rdd: org.apache.spark.rdd.RDD[String] = /Users/lyf/Desktop/data.txt MapPartitionsRDD[59] at textFile at <console>:24

scala> rdd.persist()
res41: org.apache.spark.rdd.RDD[String] = /Users/lyf/Desktop/data.txt MapPartitionsRDD[59] at textFile at <console>:24

scala> rdd.count()
res42: Long = 4

scala> rdd.count()
res43: Long = 4

StorageLevel有以下幾種

級別 使用空間 CPU時間 是否在內存 是否在磁盤 備註
MEMORY_ONLY 數據只放在內存中
MEMORY_ONLY_2 持久化2份數據
MEMORY_ONLY_SER 數據序列化後存人內存

MEMORY_ONLY_SER_2

持久化2份數據

MEMORY_AND_DISK

部分 部分 如果數據在內存中放不下,則溢寫到磁盤

MEMORY_AND_DISK_2

部分

部分

持久化2份數據

MEMORY_AND_DISK_SER

部分

部分

如果數據在內存中放不下,則溢寫到磁盤。內存中存放序列化後的數據

MEMORY_AND_DISK_SER_2

部分

部分

持久化2份數據

DISK_ONLY 數據只存入磁盤

DISK_ONLY_2

持久化2份數據

 

  • unpersist(): RDD[T]

與persist相反,該操作可以手動將持久化的數據從緩存中移除

scala> var rdd = sc.textFile("/Users/lyf/Desktop/data.txt")
rdd: org.apache.spark.rdd.RDD[String] = /Users/lyf/Desktop/data.txt MapPartitionsRDD[59] at textFile at <console>:24

scala> rdd.persist()
res41: org.apache.spark.rdd.RDD[String] = /Users/lyf/Desktop/data.txt MapPartitionsRDD[59] at textFile at <console>:24

scala> rdd.unpersist()
res44: org.apache.spark.rdd.RDD[String] @scala.reflect.internal.annotations.uncheckedBounds = /Users/lyf/Desktop/data.txt MapPartitionsRDD[59] at textFile at <console>:24

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章