RDD不存储数据

image.png

  1. val rdd: RDD[String] = sc.textFile("datas/apache.log")
  2. val flatRDD: RDD[String] = rdd.flatMap(_.split(" ")
  3. val mapRDD = flatRDD.map(word => {
  4. println("@"*12)
  5. (word,1)
  6. })
  7. val reduceRDD:RDD[(String,Int)] =mapRDD.reduceByKey(_+_)
  8. reduceRDD.collect().foreach(println)
  9. println("*"*12)
  10. val groupRDD = mapRDD.groupByKey() //并没有重用数据,还是从头读取数据
  11. groupRDD.collect().foreach(println)

image.png

持久化

cache()

image.png

  1. val rdd: RDD[String] = sc.textFile("datas/apache.log")
  2. val flatRDD: RDD[String] = rdd.flatMap(_.split(" ")
  3. val mapRDD = flatRDD.map(word => {
  4. println("@"*12)
  5. (word,1)
  6. })
  7. mapRDD.cache()
  8. val reduceRDD:RDD[(String,Int)] =mapRDD.reduceByKey(_+_)
  9. reduceRDD.collect().foreach(println)
  10. println("*"*12)
  11. val groupRDD = mapRDD.groupByKey() //并没有重用数据,还是从头读取数据
  12. groupRDD.collect().foreach(println)

image.png

cache 默认持久化的操作,只能将数据保存到内存中,如果想要保存到磁盘中,需要更改存储级别 持久化操作必须在行动算子执行时完成的

  1. rdd.persist(STorageLevel.DISK_ONLY)

存储级别
image.png

使用场景:
1.重用
2.在数据执行较长,或数据比较重要的场合也可以采用

image.png