12-pyspark的RDD算子注意事项总结

news2025/2/23 11:22:02

目录

    • 相近算子异同总结
      • 相近变换算子异同
        • foreach和foreachPartition
        • fold和reduce
        • coalesce和repatition
      • 相近动作算子异同
        • cache和persist
    • 算子注意事项
      • 需要注意的变换算子
      • 需要注意的动作算子


PySpark实战笔记系列第三篇

  • 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)
  • 11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))
  • 12-pyspark的RDD算子注意事项总结(PySpark实战笔记系列第三篇)

相近算子异同总结

相近变换算子异同

foreach和foreachPartition
  • 在应用foreachPartition操作时,定义的函数f在函数体中打印值时,需要用for x in iter进行循环。foreach操作则可直接用print(x)打印
  • 一般来说,利用foreachPartition效率比foreach要高,foreachPartitions操作是一次性处理一个partition的数据。

在这里插入图片描述

fold和reduce
  • fold函数和reduce函数功能是相同的,差别在于fold可以提供一个初始值来进行聚合
  • eg:有四个元素[1,2,3,4],reduce是直接把四个元素累加,即sum;fold则可以设定一个初始值,再进行累加,比如初始值是10,则就是10+1+2+3+4这样的累加。
coalesce和repatition
  • repartition()方法就是coalesce()方法shuffle为true的情况。

  • 如果要减少分区数量,建议采用rdd.coalesce(numPartitions, false)方法,这样可以避免shuffle导致数据混洗,从而提高计算效率!

    【备注】:在实际计算中,有时可能需要重新设置RDD的分区数量,如果要处理的数据量小,那么默认的分区可能比较多,这就可能导致计算速度比较慢(不同分区之间的任务调度时间比计算数据本身耗时),因此在计算过程中,可以设置一个比较合理的分区数,从而提高计算效率。

相近动作算子异同

cache和persist
  • rdd.cache()在RDD对象上进行缓存操作,后续的RDD操作会直接从内存中加载数据进行计算
  • 缓存操作rdd.persist(storageLevel),它可以指定存储级别storageLevel。

算子注意事项

需要注意的变换算子

  • takeSample操作:会将RDD整个加载到driver端的内存中,因此takeSample操作应用需在RDD数据不大的情况下。
  • randomSplit操作:这种随机分割在一些数据挖掘或者机器学习算法中非常有用,由于这些算法需要数据的训练集合和测试集合,因此需要把总的数据集合进行随机切分,比如70%用于训练,30%用于测试。
  • Python 3+环境下,在Spark集群上使用distinct()、reduceByKey()和join()等几个函数时,可能会触发PYTHONHASHSEED异常,即Randomness of hash of string should be disabledvia PYTHONHASHSEED,此时可以在在spark-defaults.conf设置spark.executorEnv.PYTHONHASHSEED=0。
  • cartesian操作:如果rdd1和rdd2元素个数比较多,直接进行cartesian计算可能会出现内存不足的情况。

需要注意的动作算子

  • collect操作:对于少量RDD数据的观察非常有用,海量会引起内存不足等情况。因为collect操作会将RDD数据汇总到一处,如果数据量非常大,那么可能会出现内存不足等情况,因此不适合海量数据的查看。
  • saveAsTextFile操作:数据保存当设定的目录不存在时,执行此操作则会报错。生成的数据是多个文件组成的。

参考文档:

  • https://spark.apache.org/docs/latest/api/python/reference/pyspark.html
  • 《Python大数据处理库PySpark实战》

博主写博文就是方便对自己所学所做的事做一备份记录或回顾总结。欢迎留言,沟通学习。

刚开始接触,请多指教,欢迎留言交流!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【记录】Prompt模板|作为甲方怎么清晰专业地描述自己的需求(又名“乙方,给你的甲方扔个GPT解放自己吧”)

这篇Prompt摘抄并修改自朋友送给我的书的第49页5.2.3让ChatGPT构建提示,质量挺不错,支持一下她的博客:【好书推荐2】AI提示工程实战:从零开始利用提示工程学习应用大语言模型。 书长这样: 不啰嗦了,正文如…

代码解读:使用Stable Diffusion完成相似图像生成任务

Diffusion models代码解读:入门与实战 前言:作为内容生产重要的一部分,生成相似图像是一项有意义的工作,例如很多内容创作分享平台单纯依赖用户贡献的图片已经不够了,最省力的方法就是利用已有的图片生成相似的图片作为…

vscode 之 win11前端环境安装(javascrip、html、nodejs以及插件推荐)

javascript 也可以用来编写一些小工具,包括但不限于浏览器的插件,浏览器的书签以及进行一些其他操作的小工具等。 这时候就需要进行安装前端相关的测试环境 1. nodejs (1)确保电脑存在 nodejs 的环境 在 cmd 输入 npm -v node -…

DataEase-V1.18版本源码通过Docker镜像部署与静态资源通过阿里云OSS存储实现看这一篇就够了

修改DataEase实现静态资源阿里云OSS存储 后端源码文件读取配置类配置 1.阿里云OSS配置类 /*** ClassName AliyunConfig.java* author shuyixiao* version 1.0.0* Description 阿里云OSS配置* createTime 2024年04月03日 10:03:00*/ Data Configuration public class AliyunC…

Docker端口一直占用问题,docker重置(端口无法释放)(彻底重置docker环境)

文章目录 背景解决方法:彻底重置docker环境1. 停止所有Docker容器2. 删除所有容器3. 删除所有Docker镜像4. 删除所有Docker网络5. 删除所有Docker卷6. 清理Dangling资源7. 停止Docker服务8. 删除Docker数据和配置文件9. 重启Docker服务10. 验证 在这里插入图片描述验…

PostgreSQL入门到实战-第十四弹

PostgreSQL入门到实战 PostgreSQL数据过滤(七)官网地址PostgreSQL概述PostgreSQL中BETWEEN 命令理论PostgreSQL中BETWEEN 命令实战更新计划 PostgreSQL数据过滤(七) BETWEEN运算符允许您检查值是否在值的范围内。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容…

“桃花庵主”是我国哪位古代名人的称号?2024年4月12日蚂蚁庄园今日答案

原文来源:蚂蚁庄园今日答案 - 词令 蚂蚁庄园是一款爱心公益游戏,用户可以通过喂养小鸡,产生鸡蛋,并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料,使用鸡饲料喂鸡之后,会可以获得鸡蛋&…

2024年腾讯云新用户云服务器价格表

腾讯云作为国内领先的云服务提供商,以其稳定可靠、灵活高效的服务赢得了广大用户的信赖。对于新用户而言,腾讯云提供了丰富的云服务器产品,并且制定了具有竞争力的价格策略,以吸引更多的新用户加入。 首先,我们来看一下…

【C++】STL--stackquene

这一节主要学习stack、quene和priority_quene的使用以及模拟实现,最后介绍了容器适配器。 目录 stack的介绍和使用 stack的介绍 stack的使用 stack的模拟实现 queue的介绍和使用 queue的介绍 queue的使用 queue的模拟实现 priority_queue的介绍和使用 pri…

Spring Boot与Vue联手打造智能化学生选课平台

末尾获取源码作者介绍:大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与…

嵌入式工程师需要掌握哪些技术?

嵌入式系统是当今科技领域中的重要组成部分,它们存在于我们生活的方方面面,从智能手机到汽车控制系统,从家电到医疗设备。因此,对于那些想要进入嵌入式行业的人来说,掌握一些必要的技术能力是至关重要的。在本篇中&…

springboot 反射调用ServiceImpl时报错:java.lang.NullPointerExceptio、,mapper为null【解决方法】

springboot 反射调用ServiceImpl时报错:java.lang.NullPointerException、mapper为null【解决方法】 问题描述问题分析解决方案创建SpringBootBeanUtil编写调用方法 executeMethod调用 总结 问题描述 在使用Spring Boot时,我们希望能够通过反射动态调用…

Win11又来「重大」更新!

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站ai人工智能工具 更多资源欢迎关注 Windows 11预览通道的22635.3420版本迎来了几个比较大的改进,主要有三个方面: …

Springboot 大事务问题的常用优化方案

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1.前言 2.什么是大事务 3.解决办法 3.1.少用Transactional注解 3.2..将查询…

医疗图像分割 | 基于Pyramid-Vision-Transformer算法实现医疗息肉分割

项目应用场景 面向医疗图像息肉分割场景,项目采用 Pytorch Pyramid-Vision-Transformer 深度学习算法来实现。 项目效果 项目细节 > 具体参见项目 README.md (1) 模型架构 (2) 项目依赖,包括 python 3.8、pytorch 1.7.1、torchvision 0.8.2(3) 下载…

【实战】ZLMediaKit问题解决

项目中遇到的问题 1.不带音频的rtsp转rtmp后,出现了音频 1.1判断元素rtsp是否有音频的方法 使用vlc进行访问rtsp流,看如图位置: 音频 -> 音轨 ,是否为灰色,为灰色就是不带音频 1.2 解决方法 在zlmediakit的web页面进行全局配置修改如图, 1.将3和4处修改为 否,再保存, …

网络协议——RSTP(快速生成树)与MSTP(多实例生成树)

一. RSTP 1. STP的不足 1、依靠计时器超时的方式进行收敛导致它的收敛时间需要30到50秒 2、端口状态和端口角色没有细致区分,指导数据转发依靠的不是端口状态而是端口所扮演角色。 3、如果拓扑频繁变化导致用户通信质量差,甚至通信中断&#xf…

MyBatis中的动态SQL的用法

前言:我们要想在Spring Boot环境下使用动态SQL,必须先在application.yml中添加配置 mybatis:mapper-locations: classpath:mapper/**Mapper.xml 并且新建一个xml文件,路径及写法按照配置好的形式写 在新建好的xml文件中复制进去以下代码&a…

Golang——方法

一. 方法定义 Golang方法总是绑定对象的实例,并隐式将实例作为第一实参。 只能为当前包内命名类型定义方法参数receiver可以任意命名。如方法中未曾使用,可省略参数名参数receiver类型可以是T或*T。基类型T不能是接口或指针类型(即多级指针)不支持方法重…

【JAVASE】抽象类和接口及其抽象类和接口的区别

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 目标: 1. 抽象类 2. 接口 3. Object 类 1. &am…