Spark--cache/persist设置缓存

设置缓存的作用

  • cache和persist都是用于将一个RDD进行缓存的,这样在之后使用的过程中就不需要重新计算了,可以大大节省程序运行时间
  • cache和persist的区别:cache只有一个默认的缓存级别MEMORY_ONLY ,而persist可以根据情况设置其它的缓存级别。

cache

  • 缓存RDD,缓存级别为仅在内存中
  • cache方法实际上调用了无参数的persist方法,cache只有一个默认的缓存级别MEMORY_ONLY
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("cachedemo")
    val sc: SparkContext = SparkContext.getOrCreate(conf)
    val rdd1: RDD[String] = sc.textFile("in/users.csv")
    rdd1.cache() //使用cache设置缓存
    var start: Long = System.currentTimeMillis() //返回系统当前时间
    println(rdd1.count()) //打印文件内容数量
    var end: Long = System.currentTimeMillis()
    println("第一次打印数量的时间差"+(end - start))
    start= System.currentTimeMillis()
    println(rdd1.count())
    end=System.currentTimeMillis()
    println("第二次打印数量的时间差"+(end - start))
38210
第一次打印数量的时间差328  //第一次时间较长
38210
第二次打印数量的时间差20  //第二次就起作用了

persist

  • persist有一个 StorageLevel 类型的参数,这个表示的是RDD的缓存级别
  • 取消缓存统一使用unpersist()方法
  • 一般情况下建议使用persist(StorageLevel.MEMORY_AND_DISK)方法替代cache()方法,以防止内存不足造成程序运行错误
  • StorageLevel设定有12种缓存策略,可以根据自己的情况选择合适的

在这里插入图片描述

    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("cachedemo")
    val sc: SparkContext = SparkContext.getOrCreate(conf)
    val rdd1: RDD[String] = sc.textFile("in/users.csv")
    rdd1.persist(StorageLevel.MEMORY_ONLY)
    var start: Long = System.currentTimeMillis() //返回系统当前时间
    println(rdd1.count()) //打印文件内容数量
    var end: Long = System.currentTimeMillis()
    println("第一次打印数量的时间差"+(end - start))
    start= System.currentTimeMillis()
    println(rdd1.count())
    end=System.currentTimeMillis()
    println("第二次打印数量的时间差"+(end - start))
    start= System.currentTimeMillis()
    println(rdd1.count())
    end=System.currentTimeMillis()
    println("第三次打印数量的时间差"+(end - start))
    rdd1.unpersist()//让缓存失效
    start= System.currentTimeMillis()
    println(rdd1.count())
    end=System.currentTimeMillis()
    println("第四次打印数量(缓存失效)的时间差"+(end - start))
38210
第一次打印数量的时间差320
38210
第二次打印数量的时间差19
38210
第三次打印数量的时间差10
38210
第四次打印数量(缓存失效)的时间差41  //缓存失效,时间又增加了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值