大数据 - Spark系列《十》- rdd缓存详解

 Spark系列文章:

大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客

大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客

大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客

大数据 - Spark系列《四》- Spark分布式运行原理-CSDN博客

大数据 - Spark系列《五》- Spark常用算子-CSDN博客

大数据 - Spark系列《六》- RDD详解-CSDN博客

大数据 - Spark系列《七》- 分区器详解-CSDN博客

大数据 - Spark系列《八》- 闭包引用-CSDN博客

大数据 - Spark系列《九》- 广播变量-CSDN博客 

  10.1 RDD缓存的概念理解  

如果一个RDD是由多个RDD计算来的 ,且后续的使用多次

rdd1->rdd2->rdd3->rdd4 -->rdd4结果缓存 重复使用

  • - - - - -> rdd4.map

  • - - - - -> rdd4.flatmap

  • - - - - -> rdd4.groupBy

缓存不会破坏rdd之间的依赖关系,所以缓存的数据丢失后不会影响计算结果,通过血源关系重新追溯计算

  

  10.2 RDD缓存API  

    1. persist  
​rdd2.persist(StorageLevel.MEMORY_AND_DISK)  // 可以自己控制存储级别
​
// NONE  相当于没有存储
// DISK_ONLY  缓存到磁盘
// DISK_ONLY_2  缓存到磁盘,2个副本
// 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个副本
// OFF_HEAP    缓存到堆外内存

 

🍠堆内存和堆外存

  1. 堆内存

    1. 概念:堆内存是指在计算机内存中由操作系统动态分配给程序的一块内存区域,用于存储程序运行时创建的对象和数据结构。

    2. 特点:堆内存是动态分配的,大小不固定,可根据程序需要动态扩展和收缩。在堆内存中分配的内存空间由垃圾回收器负责管理,当对象不再被程序引用时,垃圾回收器会自动回收这些对象所占用的内存空间,以便其他对象使用。

    3. 使用场景:堆内存通常用于存储程序运行时动态创建的对象和数据结构,如Java中的对象实例等。

  2. 堆外存:

    1. 概念:堆外存是指数据存储在计算机内存之外的存储介质上,如硬盘、SSD等,也称为外部存储。

    2. 特点:堆外存的存储空间通常比堆内存大得多,但访问速度相对较慢。堆外存的数据持久性较高,即使程序结束或计算机断电,数据仍然能够被保留。在大数据处理中,通常会将数据存储在堆外存储介质上,以应对数据量大、持久性要求高的情况。

    3. 使用场景:堆外存通常用于存储大规模数据集,如文件、数据库等,以及需要长期保存和持久化的数据。

   

  2. unpersist  

如果需要清除已经缓存的RDD数据,可以调用 rdd.unpersist() 方法;

  3. 🥙cache  

cache( )就是调用的 persist(StorageLevel.MEMORY_ONLY)

//数据:logs.txt
ERROR: Unable to connect to database
ERROR: File not found
WARNING: Disk space is running low
INFO: Server started successfully
INFO: User login successful
ERROR: Connection timeout
WARNING: Network connection unstable
INFO: Data processing completed
INFO: Task execution started
INFO: Application terminated
WARNING: System temperature is high
ERROR: Out of memory error
INFO: File uploaded successfully
INFO: Database backup completed
ERROR: Server crashed unexpectedly
package com.doit.day0219
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.storage.StorageLevel
import org.apache.log4j.{Level, Logger}
/**
 * @日期: 2024/2/19
 * @Author: Wang NaPao
 * @Blog: https://blog.csdn.net/weixin_40968325?spm=1018.2226.3001.5343
 * @Tips: 和我一起学习吧
 * @Description:
 */


object Test01 {
  def main(args: Array[String]): Unit = {
    // 创建SparkConf对象,并设置应用程序名称和运行模式
    val conf = new SparkConf()
      .setAppName("LogAnalysis") // 设置应用程序名称
      .setMaster("local[*]") // 设置运行模式为本地模式
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    // 创建SparkContext对象,并传入SparkConf对象
    val sc = new SparkContext(conf)

    val rdd1 = sc.textFile("data/logs.txt")
    val rdd2 = rdd1.map(line => {
      val arr: Array[String] = line.split(": ")
      (arr(0), 1)
    })

    val rdd3 = rdd2.groupByKey()
    val rdd4 = rdd3.map(e => {
      println("rdd4的逻辑执行"+e._1)
      (e._1, e._2.size)
    })

    // rdd4.cache() // 将rdd4的结果缓存起来 内存中
    //cache( )就是调用的 persist(StorageLevel.MEMORY_ONLY)
    rdd4.persist(StorageLevel.MEMORY_ONLY)
    /*
        rdd4.persist()  // 内存中
        rdd4.persist(StorageLevel.DISK_ONLY)
        rdd4.persist(StorageLevel.MEMORY_ONLY)  // 堆内内存  数据对象的方式管理
        rdd4.persist(StorageLevel.DISK_ONLY_3)  // 副本
        rdd4.persist(StorageLevel.MEMORY_ONLY_2)  // 副本
        rdd4.persist(StorageLevel.MEMORY_AND_DISK)  // 副本
        // 开启堆外内存 缓存数据
        rdd4.persist(StorageLevel.OFF_HEAP)  // 堆外
    */

    // 保留rdd之间的依赖   , 所以缓存的数据丢失不会影响最后的计算结果
    // 通过rdd的依赖关系恢复
    println("--------------------------------")
    rdd4.filter(_._1=="ERROR").foreach(e=>{println("ERROR 数量为"+e._2)})
    rdd4.filter(_._1=="WARNING").foreach(e=>{println("WARNING 数量为"+e._2)})
    rdd4.filter(_._1=="INFO").foreach(e=>{println("INFO 数量为"+e._2)})
    sc.stop()
  }
}

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/405365.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java基于微信小程序的智能停车场管理系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【计算机网络】数据链路层|封装成帧|透明传输|差错检测|PPP协议|CSMA/CD协议

目录 一、思维导图 ​ 二、数据链路层功能概述 1.数据链路层概述 2.数据链路层功能概述——封装成帧 3.数据链路层功能概述——透明传输 4.数据链路层功能概述——差错检测 三、数据链路层重要协议 1.数据链路层重要协议:PPP协议 2.数据链路层重要协议&#x…

成功解决TypeError: can‘t multiply sequence by non-int of type ‘float‘

🔥 成功解决TypeError: can’t multiply sequence by non-int of type ‘float’ 📅 日期:2024年2月23日 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化…

MIT-BEVFusion系列九--CUDA-BEVFusion部署4 c++解析pytorch导出的tensor数据

目录 创建流打印 engine 信息打印结果内部流程 启动计时功能加载变换矩阵并更新数据(重要)内部实现 该系列文章与qwe一同创作,喜欢的话不妨点个赞。 在create_core方法结束后,我们的视角回到了main.cpp中。继续来看接下来的流程。…

蜂窝物联网咖WiFi认证解决方案

项目背景 随着目前网咖模式越来越流行,给网吧部署一套无缝漫游的WIFI网络势在必行。同时,网吧无线准入的验证码在客户机上面进行更新,以防周边的人员进行蹭网,损失网吧的外网带宽。 01 需求分析 1. 网吧服务区域全部覆盖无盲区…

harbor(docker仓库)仓库部署 - 高可用

harbor(docker仓库)仓库部署 - 高可用 1. harbor高可用1.1 方案说明1. 双主复制2. 多harbor实例共享后端存储 1.2 部署高可用(多harbor实例共享后端存储)1. 服务器划分2. 安装harbor(先部署一套Harbor,用于…

Set集合(Java) 及底层原理

SET<E>是一个接口&#xff0c;添加的元素是无序的&#xff1a;添加数据的顺序和获取出的数据顺序不一致&#xff1b;不重复&#xff0c;无索引。 实现类&#xff1a; 1.HashSet&#xff1a;无序不重复无索引 2.LinkedHashSet&#xff1a;有序不重复无索引 3.TreeSet&…

聊天敏感词监控该怎样实现?

当员工在日常工作中&#xff0c;经常使用企业微信、钉钉等聊天通讯软件进行沟通和管理&#xff0c;不可避免地会出现员工和客户之间敏感行为的出现。 例如员工飞单、辱骂客户、私自承诺、收取红包等违规行为&#xff0c;这些不仅会影响公司形象&#xff0c;还会造成经济损失。…

企业级大数据安全架构(十一)Kerberos接入dophinscheduler

作者&#xff1a;楼高 建议将dophinscheduler集成到Ambari安装部署&#xff0c;在Ambari上面开启kerberos 1.安装准备 编译 从GitHub获取dolphinscheduler-1.3.9源码 git clone https://github.com/apache/dolphinscheduler.git -b 1.3.9-releasehttps://github.com/apache/…

从git上clone项目到本地后启动时的一种报错

当我们从git上拉项目到本地之后&#xff0c;先install,但启动时可能会出现报错&#xff0c;例如上面这种报错&#xff0c;这时候我们需要把package.json里的vite改一下&#xff0c;例如改成2.6.13&#xff0c;之后删掉node_modules,重新install,再启动一下&#xff0c;就好了。…

Oracle迁移到mysql-导出mysql所有索引和主键

导出建库表索引等&#xff1a; [rootlnpg ~]# mysqldump -ugistar -pxxx -h192.168.207.143 --no-data -d lndb > lndb20230223-1.sql 只导出索引&#xff1a;参考&#xff1a;MYSQL导出现有库中的索引脚本_mysql 导出数据库所有表的主键和索引-CSDN博客 -- MYSQL导出现有…

Redis(十五)Bitmap、Hyperloglog、GEO案例、布隆过滤器

文章目录 面试题常见统计类型聚合统计排序统计二值统计基数统计 Hyperloglog专有名词UV&#xff08;Unique Visitor&#xff09;独立访客PV&#xff08;Page View&#xff09;页面浏览量DAU&#xff08;Daily Active User&#xff09;日活跃用户量MAU&#xff08;Monthly Activ…

SICTF Round#3 RE WP

1. BabyC ShiftF12 一眼出 2. ez_pyc 好多wp里直接反编译出了源码&#xff0c;md5都能直接看见……我用的一样版本的uncompyle6但是没有这样的效果 这种事情也没法强求&#xff0c;老老实实逆吧 程序是一个数独&#xff0c;我实在没看出来…… 首先看到一个9*9的棋盘&…

springboot网站开发01-如何搭建Maven类型父子嵌套结构项目

springboot网站开发01-如何搭建Maven类型父子嵌套结构项目&#xff01;众所周知&#xff0c;实际上&#xff0c;在真正的公司项目开发中为了让代码实现更多的复用&#xff0c;提升项目的开发效率&#xff0c;节省开发的成本&#xff08;人力成本较高&#xff0c;代码可以尽量复…

Django——ORM增删改查

基本对象 model.objects 创建数据 可以通过django编写的命令行方式快捷创建数据 python manage.py shell 如果对模型层有任何修改都需要重启shell&#xff0c;否则操作容易出错 在shell中我们需要先引入我们的模型&#xff0c;如from bookstore.models import Book 然后通过…

TiDB离线部署、Tiup部署TiDB

先做tidb准备工作&#xff1a; 部署 TiDB 前的环境检查操作&#xff1a;TiDB 环境与系统配置检查 | PingCAP 文档中心 1.查看数据盘 fdisk -l &#xff08;2,3&#xff09;本人的分区已经是 ext4 文件系统不用分区&#xff0c;具体官方文档的分区&#xff1a; 4.查看数据盘…

7.(数据结构)堆

7.1 相关概念 堆&#xff08;Heap&#xff09;在计算机科学中是一种特殊的数据结构&#xff0c;它通常被实现为一个可以看作完全二叉树的数组对象。以下是一些关于堆的基本概念&#xff1a; 数据结构&#xff1a; 堆是一个优先队列的抽象数据类型实现&#xff0c;通过完全二叉树…

Upload-Labs-Linux1【CTF】

拿到这道题目一看&#xff0c;发现是upload靶场&#xff1b;这不简简单单吗&#xff1b;结果中间还是遇到了一些小问题 小坑总结&#xff1a;该关只识别标准php语法&#xff1a;<?php phpinfo()?>格式&#xff1b;即<?php ?> 不识别<? phpinfo()?> &…

LeetCode---385周赛

题目 3042. 统计前后缀下标对 I 3043. 最长公共前缀的长度 3044. 出现频率最高的质数 3045. 统计前后缀下标对 II 一、最长公共前缀的长度 这题可以用字典树来做。 这里简单介绍一下字典树&#xff0c;顾名思义&#xff0c;这是用来存放单词的树&#xff0c;如何存&#x…

ThreeJS 几何体顶点position、法向量normal及uv坐标 | UV映射 - 法向量 - 包围盒

文章目录 几何体的顶点position、法向量normal及uv坐标UV映射UV坐标系UV坐标与顶点坐标设置UV坐标案例1&#xff1a;使用PlaneGeometry创建平面缓存几何体案例2&#xff1a;使用BufferGeometry创建平面缓存几何体 法向量 - 顶点法向量光照计算案例1&#xff1a;不设置顶点法向量…