R处理大数据集
R会把所有的对象读存入虚拟内存中。对我们大多数用户来说,这种设计可以提高与R相互的速度,但是当分析大数据集时,这种设计会降低程序运行速度有时还会产生跟内存相关的错误。 内存限制主要取决于R的build版(32位还是64位),而在32位的windows下,取决于操作系统的版本。以cannot allocate vectoe of size开头的出错信息表示无法分配充足的连续内存,而以cannot allocate vector of length开头的出错信息表示超越了地址限制(address limit)。在处理大数据集时,应尽量使用64位版的R。对于各种build版,向量中的元素个数最大为2147483647(请自行?Memory)。 在处理大数据集时有三方面应该考虑:(a)提高程序的效率,保证执行速度;(b)把数据储存在外部,以解决内存限制问题;(c)使用专门的统计方法来有效处理大数据量的问题。 下面将分别讨论。 高效编程下面几条编程技巧来可以提高处理大数据集时的效率
- 尽量向量化运算。使用R内置的函数来处理向量、矩阵和list(例如函数sapply,lapply和mapply),尽量避免使用循环(for和while);
- 使用矩阵,必要时才使用数据框,因为矩阵的开销更少;
- 使用read.table()函数族把外部数据导入数据框时,尽量显式设定colClasses和nrows选项,设定comment.char = "",把不需要的列设置成NULL。这样可以减少占用的内存,同时加快处理速度。将外部数据导入矩阵时,使用scan()函数;
- 在处理全部数据前,用数据的子集测试程序,来优化程序,去掉bug;
- 删除临时对象和不再用的对象。调用rm(list=ls())可以删除内存中的所有对象。删除指定的对象可以用rm(object);
- 在Jeromy Anglim的博客文章“R的内存管理:一些小窍门和技巧”(原文Memory Management in R: A Few Tips and Tricks,被墙)中提到,使用函数.ls.objects()列出工作区内的对象占用的内存大小。这个函数会帮助你找到吃内存的大家伙。
- profile你的程序,看看在每个函数中花的时间。你可以用Rprof()和summaryRprof()函数完成这项工作。system.time()函数也可以帮助你。profr 和 prooftools 包提供了若干函数来帮助分析profile的输出。
- Rcpp包可以把R对象转成C++函数(原文是The Rcpp package can be used to transfer R objects to C++ functions and back when more optimized subroutines are needed. 后半句不知怎么翻译)
处理大数据集,提高代码效率只能解决一部分问题。你也可以把数据存在外部存储并使用专门的统计分析方法。 把数据存储在内存之外有几种包可以实现在内存之外存储数据。解决之道是把数据保存在外部数据库或者硬盘里的二进制文件中,然后在需要的时候部分地读取。下表描述了几种有用的包:
包 | 描述 |
ff | 提供了一种数据结构,保存在硬盘中,但是操作起来就如同在内存中一样 |
bigmemory | 支持大规模矩阵的创建、储存、读取和操作。矩阵被分配到共享内存或内存映射的文件中(memory-mapped files) |
filehash | 实现了简单的key-value数据库,在其中特征字符串key与存储在硬盘中的数据value相关联。 |
ncdf, ncdf4 | Provides an interface to Unidata netCDF data files. |
RODBC, RMySQL, ROracle, RPostgreSQL, RSQLite | 可以用这些包读取外部关系数据库管理系统的数据 |
上面的包可以帮助客服R的内存限制。除此以外,当需要在有限时间内分析大数据集时,使用专门方法也是必须的。一些有用的方法将在下面介绍。 分析大数据集的包R提供了几种分析大数据集的包:
- biglm 和 speedglm 包可以针对大数据集有效地拟合线性和广义线性模型。在处理大规模数据集时,这两个包提供了类似lm()和glm()的功能。
- 由 bigmemory 包可产生大规模矩阵,一些包可以提供分析这些大规模矩阵的函数。bigannalytics 包提供了k-means聚类、行统计量(column statistics)和一个对biglm()的封装。bigtabulate 包提供了table()、split()和tapply()的功能,bigalgebra 包提供了高等线性代数的函数。
- biglars 包提供了最小角回归(least-angle regression)、lasso以及针对大数据集的逐步回归,数据集因太大而不能读入到内存中,这时候要配合 ff 包使用。
- Brobdingnag 包可以用来处理大数字(大于2^1024)
处理从GB到TB级的数据对于任何数据都是极大的挑战。如果想查看R的更多方法,请看CRAN task View: High-Performance and Parallel Computing with R (http://cran.r-project.org/web/view)。
转 用R处理大数据集
R处理大数据集的更多相关文章
- R语言︱大数据集下运行内存管理
在实操时出现以下的问题: Error: cannot allocate vector of size 2.9GB 大神指导(http://bbs.pinggu.org/thread-3682816-1 ...
- 全网最详细的大数据集群环境下如何正确安装并配置多个不同版本的Cloudera Hue(图文详解)
不多说,直接上干货! 为什么要写这么一篇博文呢? 是因为啊,对于Hue不同版本之间,其实,差异还是相对来说有点大的,具体,大家在使用的时候亲身体会就知道了,比如一些提示和界面. 全网最详细的大数据集群 ...
- Ubuntu14.04下Ambari安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)
不多说,直接上干货! 写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentO ...
- NASNet学习笔记—— 核心一:延续NAS论文的核心机制使得能够自动产生网络结构; 核心二:采用resnet和Inception重复使用block结构思想; 核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。
from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transfer ...
- 大数据集群Linux CentOS 7.6 系统调优篇
大数据集群Linux CentOS 7.6 系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设置主机hosts文件 1>.修改主机名 [root@node100 ...
- 使用ansible部署CDH 5.15.1大数据集群
使用ansible离线部署CDH 5.15.1大数据集群 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在此之前,我之前分享过使用shell自定义脚本部署大数据集群,不管是部署CD ...
- 【Hadoop离线基础总结】大数据集群环境准备
大数据集群环境准备 三台虚拟机关闭防火墙 centOS 7 service firewalld stop ->关闭防火墙 chkconfig firewalld off ->开机关闭防火墙 ...
- 实战|Hadoop大数据集群搭建
一个执着于技术的公众号 前言 今天来为粉丝圆梦啦 话不多说,咱直接进入实战环节 实验环境: 主机名 IP地址 角色 qll251 192.16 ...
- FineReport层式报表解决大数据集展示问题攻略
本文以填报报表为例,通过分页的方式,来解决大数据集展示的问题. 实现的思想就是通过在SQL里筛选部分数据库数据,以达到浏览器可以合理的展示报表页面.(数据分段,语句我这采用的是MYSQL,如果要用其他 ...
随机推荐
- PHP的一些天坑
什么叫天坑.天呐,原来这么坑,不知则已,细思极恐. 一.小数(符点数)不能直接比较是否相等 比如 if( 0.5+0.2==0.7 ) 的结果是 false.究其原因是因为,PHP是基于C语言的,而C ...
- Wireshark网络抓包(二)——过滤器
一.捕获过滤器 选中捕获选项后,就会弹出下面这个框,在红色输入框中就可以编写过滤规则. 1)捕获单个IP地址 2)捕获IP地址范围 3)捕获广播或多播地址 4)捕获MAC地址 5)捕获所有端口号 6) ...
- [CSS3] 学习笔记-CSS3选择器详解(一)
1.属性选择器 在CSS3中,追加了3个属性选择器,分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概念. <!doctype html> ...
- Express之get,pos请求参数的获取
Express的版本4.X Get query参数的获取 url假设:http://localhost:3000/users/zqzjs?name=zhaoqize&word=cool& ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
- 使用HeartBeat实现高可用HA的配置过程详解
一.写在前面 HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至 ...
- 吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享
很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很 ...
- nagios安装及监控Linux主机
服务端的操作:##################################安装lamp环境及依赖包########################## 24 rpm -ivh gd-de ...
- java注解(基础)
一.认识注解 1.注解的定义: java提供了一种原程序中的元素关联任何信息和元数据的途径和方法. 2.学习注解的目的: (1)能够读懂别人写的代码,特别是框架相关的代码(框架中使用注解是非常方便的) ...
- React库
一.React概述 React是一个是一个开源的js库,用来为数据渲染视图的,由facebook,Instagram社区维护的.(例如美团.阿里.airbnb都在使用React开发) 为什么会出现Re ...