当前位置: 首页 > wzjs >正文

朋友帮忙做网站 费用多少四川省建设资格注册中心网站

朋友帮忙做网站 费用多少,四川省建设资格注册中心网站,百度问一问付费咨询,世界羽联最新排名生活中缓存容量受成本和体积限制(比如 CPU 缓存只有几 MB 到几十 MB),但会通过算法(如 “最近最少使用” 原则)智能决定存什么,确保存的是 “最可能被用到的数据”。 1. 为什么需要缓存? 惰性执…

生活中缓存容量受成本和体积限制(比如 CPU 缓存只有几 MB 到几十 MB),但会通过算法(如 “最近最少使用” 原则)智能决定存什么,确保存的是 “最可能被用到的数据”。

1. 为什么需要缓存?

  • 惰性执行机制:Spark 的转换操作(如 mapfilterjoin)是惰性的,只有在触发行动操作(如 countcollect)时才会真正执行。如果多次使用同一个 RDD/DataFrame,每次行动操作都会重新计算整个血缘(Lineage),导致性能浪费。

  • 缓存的作用:将重复使用的数据持久化到内存或磁盘,避免重复计算。

2. 如何缓存数据?

Spark 提供两种方法缓存数据:

  • persist(storageLevel):指定存储级别(如内存、磁盘等)。

  • cache():等价于 persist(StorageLevel.MEMORY_ONLY),默认将数据存储在内存中。

3.RDD缓存

Spark速度非常快的原因之一,就是在不同操作中可以在内存中持久化或缓存多个数据集。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。这使得后续的动作变得更加迅速。RDD相关的持久化和缓存,是Spark最重要的特征之一。

RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的行动算子时,该RDD将会被缓存在计算节点的内存中,并供以后重用。

不用缓存的例子

代码展示:

import org.apache.spark.storage.StorageLevel

import org.apache.spark.{SparkConf, SparkContext}

object Cache {

  def main(args: Array[String]): Unit = {

    // 配置Spark

    val conf = new SparkConf().setAppName("CacheExample").setMaster("local[*]")

    val sc = new SparkContext(conf)

//    conf.set("spark.local.dir", "_cache")

sc.setLogLevel("WARN")

    // 创建一个包含大量随机数的 RDD

    val largeRDD = sc.parallelize(1 to 1000*1000*10).map(_ => scala.util.Random.nextInt(1000))

    // 定义一个复杂的转换函数

    def complexTransformation(num: Int): Int = {

      var result = num

      for (_ <- 1 to 1000) {

        result = result * 2 % 1000

      }

      result

    }

    // 不使用 cache 的情况

    val nonCachedRDD = largeRDD.map(complexTransformation)

    // 第一次触发行动算子,计算并统计时间

    val startTime1 = System.currentTimeMillis()

    val result1 = nonCachedRDD.collect()

    val endTime1 = System.currentTimeMillis()

    println(s"不使用 cache 第一次计算耗时: ${endTime1 - startTime1} 毫秒")

    // 第二次触发行动算子,计算并统计时间

    val startTime2 = System.currentTimeMillis()

    val result2 = nonCachedRDD.collect()

    val endTime2 = System.currentTimeMillis()

    println(s"不使用 cache 第二次计算耗时: ${endTime2 - startTime2} 毫秒")

    sc.stop()

  }

}

核心代码说明:

1.map算子是转换算子,并不会导致真正的计算

2.第一次调用collect和第二调用collect花的时间基本一致。这就是没有缓存的效果。

带缓存的例子:

代码展示:

// 使用 cache 的情况

    val cachedRDD = largeRDD.map(complexTransformation).cache()

   

    // 第一次触发行动算子,计算并统计时间

    val startTime3 = System.currentTimeMillis()

    val result3 = cachedRDD.collect()

    val endTime3 = System.currentTimeMillis()

    println(s"使用 cache 第一次计算耗时: ${endTime3 - startTime3} 毫秒")

    // 第二次触发行动算子,计算并统计时间

    val startTime4 = System.currentTimeMillis()

    val result4 = cachedRDD.collect()

    val endTime4 = System.currentTimeMillis()

    println(s"使用 cache 第二次计算耗时: ${endTime4 - startTime4} 毫秒")

    println(s"spark.local.dir 的值: ${conf.get("spark.local.dir")}")

    sc.stop()

核心代码说明:

第一次调用collect时,程序需要对RDD中的每个元素执行fibonacci函数进行计算,这涉及到递归运算,比较耗时。

第二次调用collect时,因为之前已经调用了cache方法,并且结果已被缓存,所以不需要再次执行计算,直接从缓存中读取数据。通过对比两次计算的耗时,可以明显发现第二次计算耗时会远小于第一次(在数据量较大或计算复杂时效果更显著),这就体现了cache方法缓存计算结果、避免重复计算、提升后续操作速度的作用 。

http://www.dtcms.com/wzjs/586167.html

相关文章:

  • php学校网站建设滕建建设集团网站
  • 类似美团的网站建设西安百度百科
  • 公司网站建设代码都写完了安徽合肥最新消息
  • 做网站哪里高端网站建设的市场分析
  • 有专门做网站的公司吗培训机构网站php源码
  • 单页购物网站源码加强网站的建设与管理
  • 深圳响应式网站价格如何给喜欢的明星做网站
  • 衣服销售网站建设规划书范文wordpress 广告屏蔽
  • 网站在排版有哪些方法微信里的小程序怎么找出来
  • 专业轻电商网站建设公司最贵网站建设报价
  • 做新闻类网站还有市场吗lnmp wordpress php7
  • 免费制作主图的网站铁建设文件在什么网站下载
  • html电影网站模板商务类网站设计
  • 网站建设优秀网c语言新手入门代码
  • 商城型网站的概念品牌网站建设多少钱
  • 晋城网站开发魔兽世界 建设公会网站
  • 哪家公司做网站开发做得比较好特色个人网页设计
  • 深圳国税局网站怎么做票种核定关于网站建设的网站
  • 做网站策划的工具平湖网站建设流程
  • 成都的网站建设开发公司哪家好深圳网站seo地址
  • 重庆企业网站建设哪家好公司网站开发 nodejs
  • 中小企业怎么优化网站20个优秀微信小程序
  • 网站建设图片设置杭州建设信息网
  • 国内著名平面设计师的个人网站我要自学网做网站
  • 网站建设要做哪些前期准备工作设计作品
  • 云南昆州建设工程有限公司网站wordpress注册表文件
  • wordpress acg站网上超市怎么做
  • 网站知识免费傻瓜室内装修设计软件
  • 网站建设与管理是学什么江苏元鼎建设工程有限公司网站
  • 杭州好的公司网站设计用科讯cms做网站的步骤