Spark程序性能优化之persist()
Spark的RDD Persistence,是一个重要的能力,可以将中间结果保存,提供复用能力,加速基于中间结果的后续计算,经常可以提高10x以上的性能。在PySpark的DataFrame中同样适用。
主要方法是persist()
和cache()
。官方说明请看RDD Persistence。
需要注意的是,Spark Python API中,默认存储级别是MEMORY_AND_DISK
。
本文记录一下实际开发中使用Spark这个能力的一些心得,主要是PySpark。
persist()
和cache()
该使用哪个?
建议总是使用persist()
。
原因:persist()
功能更加强大,由于其支持设置存储级别,所以用起来更加灵活方便。cache()
虽然是使用默认存储级别,但是在网上看到,使用cache()
出现内存溢出的问题,换成persist()
就没问题。我一般使用persist()
,所以没遇到过这个问题。
什么时候使用persist()
?
1、当一个中间数据集,后面被多个计算重复使用,你应该对这个数据集使用persist()
。
2、如果资源允许,你应该尽可能多的使用persist()
,因为这可以极大的减少重复计算,提高程序性能。
关于第2点,至少我写这篇随笔时,是这样认为的。为什么这么说,是因为我在实际开发中做过一个对比测试。
我开发了一个PySpark程序,只对最大的几个需要重复使用的数据集使用了persist()
,程序运行时间10分钟左右。这个程序中,有不少中间结果会被重复使用,当我对一部分中间结果数据集也使用了persist()
之后,程序运行时间降低为8.7分钟左右。当我对大部分会被重复使用的中间结果数据集使用了persist()
之后,程序运行时间进一步降低为8分钟左右。
我对比了三种程序的stage情况,发现使用persist()
多的程序,stage数量有一定的减少,另外相同的stage,可以达到几秒的差距,当然也许和机器配置有关。不过这个性能提升确实非常明显!!也许存在偶然性,不过理论上来说,这个应该可以提升性能。
什么时候使用unpersist()
?
unpersist()
是用来释放资源的,是persist()
的反向操作。
你应该在第一时间使用unpersist()
,也就是说,当这个数据集不再被使用,应该立刻释放其占用的资源。
该如何选择存储级别?
如果条件允许,建议使用默认存储级别。
在PySpark中,persist()
的默认存储级别是MEMORY_AND_DISK
,个人觉得这个存储级别是一个非常好的策略。
至于其他存储级别,可以在程序调试中对比测试其性能,来决定使用哪个存储级别。
Spark程序性能优化之persist()相关推荐
- asp.net程序性能优化的七个方面
asp.net程序性能优化的七个方面 一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器 ...
- 原来 CPU 为程序性能优化做了这么多
来自:武培轩 本文主要来学习内存屏障和 CPU 缓存知识,以便于我们去了解 CPU 对程序性能优化做了哪些努力. 首先来看下 CPU 缓存: CPU 缓存 CPU 缓存是为了提高程序运行的性能,CPU ...
- 《C++应用程序性能优化::第五章动态内存管理》学习和理解
<C++应用程序性能优化::第五章动态内存管理>学习和理解 说明:<C++应用程序性能优化> 作者:冯宏华等 2007年版. 2010.8.29 cs_wuyg@126.com ...
- C++应用程序性能优化
C++应用程序性能优化 C++应用程序性能优化系列博客主要依据<C++应用程序性能优化>(第2版)学习整理而来,同时参考部分网络博客. C++应用程序性能优化(一)--应用程序性能优化简介 ...
- C++应用程序性能优化(三)——C++语言特性性能分析
C++应用程序性能优化(三)--C++语言特性性能分析 一.C++语言特性性能分析简介 通常大多数开发人员认为,汇编语言和C语言比较适合编写对性能要求非常高的程序,C++语言主要适用于编写复杂度非常高 ...
- 微信小程序性能优化之一
微信小程序性能优化之一 原文:微信小程序性能优化之一 性能优化 界面和业务逻辑之间事件交互 小程序调用native Native回调小程序 图片源文件优化 渲染优化 ----------------- ...
- Hibernate程序性能优化的考虑要点
Hibernate程序性能优化的考虑要点 Tag:java,j2ee,hibernate,O/R mappling, spring,性能,效率 本文依照HIBERNATE帮助文档,一些网络书籍及项目经 ...
- C++ 应用程序性能优化,第 6 章:内存池
引言 本书主要针对的是 C++ 程序的性能优化,深入介绍 C++ 程序性能优化的方法和实例.全书由 4 个篇组成,第 1 篇介绍 C++ 语言的对象模型,该篇是优化 C++ 程序的基础:第 2 篇主要 ...
- C++ 应用程序性能优化
C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...
最新文章
- jsp和servlet开发过程中参数传递乱码问题总结
- 【深度学习】LeNet-5、AlexNet、VGG16、GoogLeNet、ResNet
- Istio 自动注入 sidecar 不成功及k8s安装istio后pod无法创建解决方案
- 中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
- oracle基础学习---------1
- 解决Spring JdbcTemplate调用queryForObject()方法结果集为空时报异常
- linux添加usb打印机,打印机配置和添加本地打印机
- 计算机专业问卷调查,大学生计算机专业调查问卷.doc
- 抖音下载小助手GUI版
- python3自动化软件发布系统pdf_Python 3自动化软件发布系统 -Django 2实战
- html5理财计算,理财产品的收益怎么算(个人理财收益计算器)
- Mininet-wifi安装和简单使用
- 2019NIvidia ASIC PD笔试题概念解析
- 毕业季:我和未来有个对话
- 关于applet小程序在浏览器上运行的备注
- 计算机管理如何格式化u盘,如何格式化U盘【图文教程】
- chip在计算机英语什么意思,chip是什么意思中文翻译
- es6转es5 的6种方式
- java重置按钮功能函数_Bootstrap按钮功能之查询按钮和重置按钮
- 电子信息工程专业考研考什么内容?
热门文章
- Python文件操作之把臂入林
- Python知道cos值求角度_机械臂正运动学-DH参数-Python快速实现
- 第十届极客大挑战——复现未解决的web和RE
- 网易视频云资深产品经理钱栩磊:2B产品经理养成记
- 背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块)
- 贵州兴义电大学计算机培训,黔西南州机电职业技术学校
- 微信扫码支付:此公众号并没有这些scope的权限,错误码:10005
- Huawei/华为WATCH GT2e智能手表,包邮免费送!
- gui学生信息管理系统java,Java实训·GUI学生信息管理系统
- Mac关闭Iphone更新系统iTunes强制自动备份文件