Python大数据之PySpark(八)SparkCore加强

2023-10-27 22:59

本文主要是介绍Python大数据之PySpark(八)SparkCore加强,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • SparkCore加强
    • Spark算子补充
    • [掌握]RDD 持久化
    • [掌握]RDD Checkpoint
    • 后记

SparkCore加强

  • 重点:RDD的持久化和Checkpoint
  • 提高拓展知识:Spark内核调度全流程,Spark的Shuffle
  • 练习:热力图统计及电商基础指标统计
  • combineByKey作为面试部分重点,可以作为扩展知识点

Spark算子补充

  • 关联函数补充

  • join为主基础算子

  • # -*- coding: utf-8 -*-
    # Program function:演示join操作
    from pyspark import SparkConf, SparkContextif __name__ == '__main__':print('PySpark join Function Program')# TODO:1、创建应用程序入口SparkContext实例对象conf = SparkConf().setAppName("miniProject").setMaster("local[*]")sc = SparkContext.getOrCreate(conf)# TODO: 2、从本地文件系统创建RDD数据集x = sc.parallelize([(1001, "zhangsan"), (1002, "lisi"), (1003, "wangwu"), (1004, "zhangliu")])y = sc.parallelize([(1001, "sales"), (1002, "tech")])# TODO:3、使用join完成联合操作print(x.join(y).collect())  # [(1001, ('zhangsan', 'sales')), (1002, ('lisi', 'tech'))]print(x.leftOuterJoin(y).collect())print(x.rightOuterJoin(y).collect())  # [(1001, ('zhangsan', 'sales')), (1002, ('lisi', 'tech'))]sc.stop()
    

[掌握]RDD 持久化

为什么使用缓存

  • 缓存可以加速计算,比如在wordcount操作的时候对reduceByKey算子进行cache的缓存操作,这时候后续的操作直接基于缓存后续的计算
  • 缓存可以解决容错问题,因为RDD是基于依赖链的Dependency
  • 使用经验:一次缓存可以多次使用

如何进行缓存?

  • spark中提供cache方法

  • spark中提供persist方法

  • # -*- coding: utf-8 -*-
    # Program function:演示join操作
    from pyspark import SparkConf, SparkContext
    from pyspark.storagelevel import StorageLevel
    import time
    if __name__ == '__main__':print('PySpark join Function Program')# TODO:1、创建应用程序入口SparkContext实例对象conf = SparkConf().setAppName("miniProject").setMaster("local[*]")sc = SparkContext.getOrCreate(conf)# TODO: 2、从本地文件系统创建RDD数据集x = sc.parallelize([(1001, "zhangsan"), (1002, "lisi"), (1003, "wangwu"), (1004, "zhangliu")])y = sc.parallelize([(1001, "sales"), (1002, "tech")])# TODO:3、使用join完成联合操作join_result_rdd = x.join(y)print(join_result_rdd.collect())  # [(1001, ('zhangsan', 'sales')), (1002, ('lisi', 'tech'))]print(x.leftOuterJoin(y).collect())print(x.rightOuterJoin(y).collect())  # [(1001, ('zhangsan', 'sales')), (1002, ('lisi', 'tech'))]# 缓存--基于内存缓存-cache底层调用的是self.persist(StorageLevel.MEMORY_ONLY)join_result_rdd.cache()# join_result_rdd.persist(StorageLevel.MEMORY_AND_DISK_2)# 如果执行了缓存的操作,需要使用action算子触发,在4040页面上看到绿颜色标识join_result_rdd.collect()# 如果后续执行任何的操作会直接基于上述缓存的数据执行,比如countprint(join_result_rdd.count())time.sleep(600)sc.stop()
  • image-20210913102528567

缓存级别

  • image-20210913102800763
  • image-20210913103108374
  • image-20210913103708888
  • 如何选:
  • 1-首选内存
  • 2-内存放不下,尝试序列化
  • 3-如果算子比较昂贵可以缓存在磁盘中,否则不要直接放入磁盘
  • 4-使用副本机制完成容错性质

释放缓存

  • 后续讲到Spark内存模型中,缓存放在Execution内存模块

  • 如果不在需要缓存的数据,可以释放

  • image-20210913104316323

  • 最近最少使用(LRU)

print(“释放缓存之后,直接从rdd的依赖链重新读取”)
print(join_result_rdd.count())


* <img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231009192818.png" alt="image-20210913104616717" style="zoom:150%;" />

何时缓存数据

  • rdd来之不易
  • 经过很长依赖链计算
  • 经过shuffle
  • rdd被使用多次
  • 缓存cache或persist
  • 问题:缓存将数据保存在内存或磁盘中,内存或磁盘都属于易失介质
  • 内存在重启之后没有数据了,磁盘也会数据丢失
  • 注意:缓存会将依赖链进行保存的
  • 如何解决基于cache或persist的存储在易失介质的问题?
  • 引入checkpoint检查点机制
  • 将元数据和数据统统存储在HDFS的非易失介质,HDFS有副本机制
  • checkpoint切断依赖链,直接基于保存在hdfs的中元数据和数据进行后续计算
  • 什么是元数据?
    • 管理数据的数据
    • 比如,数据大小,位置等都是元数据

[掌握]RDD Checkpoint

  • 为什么有检查点机制?

    • 因为cache或perisist将数据缓存在内存或磁盘中,会有丢失数据情况,引入检查点机制,可以将数据斩断依赖之后存储到HDFS的非易失介质中,解决Spark的容错问题
    • Spark的容错问题?
      • 有一些rdd出错怎么办?可以借助于cache或Persist,或checkpoint
  • 如何使用检查点机制?

    • 指定数据保存在哪里?
    • sc.setCheckpointDir(“hdfs://node1:9820/chehckpoint/”)
    • 对谁缓存?答案算子
    • rdd1.checkpoint() 斩断依赖关系进行检查点
    • 检查点机制触发方式
    • action算子可以触发
    • 后续的计算过程
    • Spark机制直接从checkpoint中读取数据
    • image-20210913112234765
    • 实验过程还原:
    • image-20210913112306448image-20210913112326371
    • image-20210913112413321
    • image-20210913112440134
  • 检查点机制那些作用?

    • 将数据和元数据保存在HDFS中
    • 后续执行rdd的计算直接基于checkpoint的rdd
    • 起到了容错的作用
  • 面试题:如何实现Spark的容错?

    • 1-首先会查看Spark是否对数据缓存,cache或perisist,直接从缓存中提取数据
    • 2-否则查看checkpoint是否保存数据
    • 3-否则根据依赖关系重建RDD
  • 检查点机制案例

持久化和Checkpoint的区别

  • 存储位置:缓存放在内存或本地磁盘,检查点机制在hdfs
  • 生命周期:缓存通过LRU或unpersist释放,检查点机制会根据文件一直存在
  • 依赖关系:缓存保存依赖关系,检查点斩断依赖关系链

案例测试:

先cache在checkpoint测试

  • 1-读取数据文件
  • 2-设置检查点目录
  • 3-rdd.checkpoint() 和rdd.cache()
  • 4-执行action操作,根据spark容错选择首先从cache中读取数据,时间更少,速度更快
  • image-20210913114439275
  • 5-如果对rdd实现unpersist
  • 6-从checkpoint中读取rdd的数据
  • 在这里插入图片描述
  • 7-通过action可以查看时间
  • image-20210913114535550

AI副业实战手册:http://www.yibencezi.com/notes/253200?affiliate_id=1317(目前40+工具及实战案例,持续更新,实战类小册排名第一,做三个月挣不到钱找我退款,交个朋友的产品)

后记

📢博客主页:https://manor.blog.csdn.net

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 Maynor 原创,首发于 CSDN博客🙉
📢感觉这辈子,最深情绵长的注视,都给了手机⭐
📢专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_12453356.html

这篇关于Python大数据之PySpark(八)SparkCore加强的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/289014

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下