美文网首页RR语言与统计分析数据-R语言-图表-决策-Linux-Python
R-超大数据量计算过程中,算完一组,内存就炸了,然后程序就崩了?

R-超大数据量计算过程中,算完一组,内存就炸了,然后程序就崩了?

作者: TroyShen | 来源:发表于2020-01-11 11:12 被阅读0次

    目录

    • 1.问题导入
    • 2.示例数据
    • 3.导入示例数据
    • 4.烧内存示例(图1)
    • 5.尝试清理内存
    • 6.放大招
    • 7.总结
    • 8.本篇所使用到的软件包(没有的小伙伴需要用install.packages('')进行安装)
    • 9.致谢

    1. 问题导入

    今天之所以会写这篇,源于昨天晚饭回来后的崩溃~昨天写了一段计算量比较大的脚本,有多大呢?定量化来讲就是64G内存,每段运算会占到80%!!但是,R呢在内存释放方面比较木讷,不会自己运算完后对内存进行清理。所以,整个程序不能跑完全程,完成所有变量的计算与结果输出。那么,应该怎么办呢?!除了重启,本篇给出解决方案~

    内存燃烧预警

    2. 示例数据

    本篇所采用的NC示例数据与之前一篇" R-ggplot2-说说绘图中颜色的这点事-应该是比较全的总结篇 "的示例数据一致,同样采用的是“全球sc-PDSI(干旱指数)1901-2018年的月尺度数据”。数据信息如下:

    • 时间分辨率:月
    • 空间分辨率:0.5°×0.5°
    • 数据维度:360(行数)×720(列数)×1416(月份个数,也称数据深度),储存方式如图1。

    下载链接如下:
    点我下载NC文件

    3. 导入示例数据

    由于本例使用笔记本示例,时间可能会有些久(764.670s)。因此,大家在平时计算大数据过程中,尽量选择性能较好的机器,负责数据导入一项就会让你崩溃不已。

    setwd('/Users/jerseyshen/Documents/JianShu_Project/20200111')
    files = list.files(pattern = '.nc$')
    data = stack(files)
    system.time(vx <- velox(data))
     user  system elapsed 
    555.249 190.783 764.670 
    

    4. 烧内存示例(图1)

    内存(预算)在燃烧啊,在寒冷的冬天,为啥感觉又是一阵寒颤。究其原因,那大概是钱包漏风了。。。


    图1 内存燃烧中

    5. 尝试清理内存

    在完成导入,并进行了一些与硬盘互动的骚操作后,我要进行下一项操作了。但我实在不想重启R,太麻烦。。。于是乎,我想起了R语言似乎有一个类似于与remove同音的一个函数rm(''). 喜极而泣,遂狂敲入行!!

    rm(vx)
    

    然而回车后。。。我有种被调戏的感觉?!rm的remove属性体现在哪里啊?!完全没用好不啦!

    图2 内存向我发来了阵阵嘲讽

    6. 放大招

    其实,不是rm技能不行。而是小编没有深谙其武功之高深,忽略了其一项隐藏技能--gc(), 全称garbage collection。哈哈哈哈,是不是很搞笑,其隐藏技能翻译过来竟是收破烂的,哈哈哈哈哈!

    gc()
       used  (Mb) gc trigger   (Mb) limit (Mb)
    Ncells 3427461 183.1    5514955  294.6         NA
    Vcells 6988171  53.4  390235361 2977.3      16384
            max used   (Mb)
    Ncells   5514955  294.6
    Vcells 403613667 3079.4
    

    然后就是真香现场(图3),果然不能以“名”取“函数”呀!

    图3 大型真香现场

    7. 总结

    本篇主要解决了以下问题:

    1. 如何在处理大数据过程中,避免内存溢出,程序崩盘?特别是在处理高分辨率的遥感影像的时候!本篇技能真的很香!

    8. 本篇所使用到的软件包(没有的小伙伴需要用install.packages('')进行安装)

    library(raster)
    library(sp)
    library(ncdf4)
    library(velox)
    

    9. 致谢

    首先,感谢大家的持续关注,小编会继续努力,持续更新下去的!

    大家如果觉得有帮助啊,还麻烦大家关注点赞,也可以扩散到朋友圈,多多引导朋友加入咱们这个简书技术平台, 代码共享推动科研进程, 多谢大家啦~

    大家如果在使用本代码的过程有遇到问题的,可以留言评论,也可以私信我哈~~


    小编联系方式

    相关文章

      网友评论

        本文标题:R-超大数据量计算过程中,算完一组,内存就炸了,然后程序就崩了?

        本文链接:https://www.haomeiwen.com/subject/bzyvactx.html