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()相关推荐

  1. asp.net程序性能优化的七个方面

    asp.net程序性能优化的七个方面 一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器 ...

  2. 原来 CPU 为程序性能优化做了这么多

    来自:武培轩 本文主要来学习内存屏障和 CPU 缓存知识,以便于我们去了解 CPU 对程序性能优化做了哪些努力. 首先来看下 CPU 缓存: CPU 缓存 CPU 缓存是为了提高程序运行的性能,CPU ...

  3. 《C++应用程序性能优化::第五章动态内存管理》学习和理解

    <C++应用程序性能优化::第五章动态内存管理>学习和理解 说明:<C++应用程序性能优化> 作者:冯宏华等 2007年版. 2010.8.29 cs_wuyg@126.com ...

  4. C++应用程序性能优化

    C++应用程序性能优化 C++应用程序性能优化系列博客主要依据<C++应用程序性能优化>(第2版)学习整理而来,同时参考部分网络博客. C++应用程序性能优化(一)--应用程序性能优化简介 ...

  5. C++应用程序性能优化(三)——C++语言特性性能分析

    C++应用程序性能优化(三)--C++语言特性性能分析 一.C++语言特性性能分析简介 通常大多数开发人员认为,汇编语言和C语言比较适合编写对性能要求非常高的程序,C++语言主要适用于编写复杂度非常高 ...

  6. 微信小程序性能优化之一

    微信小程序性能优化之一 原文:微信小程序性能优化之一 性能优化 界面和业务逻辑之间事件交互 小程序调用native Native回调小程序 图片源文件优化 渲染优化 ----------------- ...

  7. Hibernate程序性能优化的考虑要点

    Hibernate程序性能优化的考虑要点 Tag:java,j2ee,hibernate,O/R mappling, spring,性能,效率 本文依照HIBERNATE帮助文档,一些网络书籍及项目经 ...

  8. C++ 应用程序性能优化,第 6 章:内存池

    引言 本书主要针对的是 C++ 程序的性能优化,深入介绍 C++ 程序性能优化的方法和实例.全书由 4 个篇组成,第 1 篇介绍 C++ 语言的对象模型,该篇是优化 C++ 程序的基础:第 2 篇主要 ...

  9. C++ 应用程序性能优化

    C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...

最新文章

  1. jsp和servlet开发过程中参数传递乱码问题总结
  2. 【深度学习】LeNet-5、AlexNet、VGG16、GoogLeNet、ResNet
  3. Istio 自动注入 sidecar 不成功及k8s安装istio后pod无法创建解决方案
  4. 中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
  5. oracle基础学习---------1
  6. 解决Spring JdbcTemplate调用queryForObject()方法结果集为空时报异常
  7. linux添加usb打印机,打印机配置和添加本地打印机
  8. 计算机专业问卷调查,大学生计算机专业调查问卷.doc
  9. 抖音下载小助手GUI版
  10. python3自动化软件发布系统pdf_Python 3自动化软件发布系统 -Django 2实战
  11. html5理财计算,理财产品的收益怎么算(个人理财收益计算器)
  12. Mininet-wifi安装和简单使用
  13. 2019NIvidia ASIC PD笔试题概念解析
  14. 毕业季:我和未来有个对话
  15. 关于applet小程序在浏览器上运行的备注
  16. 计算机管理如何格式化u盘,如何格式化U盘【图文教程】
  17. chip在计算机英语什么意思,chip是什么意思中文翻译
  18. es6转es5 的6种方式
  19. java重置按钮功能函数_Bootstrap按钮功能之查询按钮和重置按钮
  20. 电子信息工程专业考研考什么内容?

热门文章

  1. Python文件操作之把臂入林
  2. Python知道cos值求角度_机械臂正运动学-DH参数-Python快速实现
  3. 第十届极客大挑战——复现未解决的web和RE
  4. 网易视频云资深产品经理钱栩磊:2B产品经理养成记
  5. 背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块)
  6. 贵州兴义电大学计算机培训,黔西南州机电职业技术学校
  7. 微信扫码支付:此公众号并没有这些scope的权限,错误码:10005
  8. Huawei/华为WATCH GT2e智能手表,包邮免费送!
  9. gui学生信息管理系统java,Java实训·GUI学生信息管理系统
  10. Mac关闭Iphone更新系统iTunes强制自动备份文件