spark 缓存

spark 缓存

spark 比 MapReduce 快的一个原因

package com.shujia.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}

object Demo23Cache {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf()
      .setMaster("local")
      .setAppName("Demo23Cache")

    val sc = new SparkContext(conf)

    val studentsRDD: RDD[String] = sc.textFile("data/students.txt")

    //1、将数据拆分出来
    val studentTupleRDD: RDD[(String, String, Int, String, String)] = studentsRDD.map(student => {

      //这边打个标记,用来观察上面的代码是不是执行了两次
      println("studentTupleRDD")

      val split: Array[String] = student.split(",")
      (split(0), split(1), split(2).toInt, split(3), split(4))
    })

    /**
      * 当对同一个rdd多次使用的时候可以将这个rdd缓存起来
      *
      */

    //cache() 的缓存级别是 MEMORy_PNLY
    //cache() 也是懒执行
    //studentTupleRDD.cache()

    //使用其它的缓存级别
    studentTupleRDD.persist(StorageLevel.MEMORY_ONLY_SER)

    /**
      * 统计班级的人数
      *
      */

    //1、取出班级
    val clazzRDD: RDD[(String, Int)] = studentTupleRDD.map {
      //在这里case的字段我们只用到了一个clazz
      //没有使用的列可以使用下划线占位,可以消除IDEA的警告
      case (_: String, _: String, _: Int, _: String, clazz: String) =>
        (clazz, 1)
    }

    //统计人数
    //reduceByKey((x, y) => x + y)中的x和y我们都只用到了1次
    //可以使用_来代替x和y,如下所示
    //reduceByKey( _ + _ )
    val clazzNumRDD: RDD[(String, Int)] = clazzRDD.reduceByKey((x, y) => x + y)

    clazzNumRDD.foreach(println)

    /**
      * 统计性别的人数
      *
      */

    //1、取出性别
    val genderRDD: RDD[(String, Int)] = studentTupleRDD.map {
      ///没有使用的列可以使用下划线占位
      case (_: String, _: String, _: Int, gender: String, _: String) =>
        (gender, 1)
    }

    //统计人数
    val genderNumRDD: RDD[(String, Int)] = genderRDD.reduceByKey((x, y) => x + y)

    genderNumRDD.foreach(println)

    while (true) {

    }
  }
}

缓存流程图

缓存策略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值