深入ff and ffbase

用ff 包读取一个csv 文件

>options(fftempdir = [二进制文件存放的位置])

>file_chunks <- read.csv.ffdf(file=”big_data.csv”, header=T, sep=”,”, VERBOSE=T, next.rows=500000, colClasses=NA)

ff通过next.row指定的参数一块一块的读取一个大数据量的csv文件,它读取切割块并写入二进制文件,并将文件的指针存储在内存中,然后重复的执行此步骤直到csv文件离开没有块。

以同样的方式,我们可以在块中编写csv或其他文件。它从本地磁盘一块一块的读取数据或任何其他外部媒体中读取大块块,并将其写入csv或其他支持的格式。
>write.csv.ffdf(File_chunks, “file_name.csv”)

  

ff 包 给我们提供了 ffbase 的包 以供我们实现一些  排序,关联,聚合,分割和切片的功能

>Merged_data = merge(ffobject1, ffobject2, by.x=c(“Col1”, “Col2”), by.y=c(“Col1″,”Col2”), trace=T)

  

ff,ffbase包的合并功能与data.frame工作相似,但只允许内部和左侧连接

 
>library(“doBy”)

>AggregatedData = ffdfdply(ffobject, split=as.character(ffobject$Col1), FUN=function(x) summaryBy(Col3+Col4+Col5 ~ Col1, data=x, FUN=sum))

 重点说下 ffdfdply函数

在ffdf上执行split-apply-combine。根据split参数拆分传入的数据集并将应用于FUN,将FUN的结果存储在ffdf中。
请注意,此函数实际上并不拆分数据。为了减少数据在大量分割级别的情况下放入RAM的次数,该功能根据BATCHBYTES提取可以放入RAM的分割块。请确保您的FUN涵盖了几个拆分元素可以在应用FUN的一个数据块中。
另外,分组中的NA不被视为将应用FUN的分裂。

关于split参数

根据split拆分整体数据集并将FUN应用于数据,将FUN的结果存储在ffdf中。

但是注意此函数实际上并不拆分数据。为了减少数据在大量分割级别的情况下放入RAM的次数,

该功能根据BATCHBYTES(整数标量限制在一个块中要处理的字节数)提取可以放入RAM的分割元素组。

为了执行聚合,我使用了可用于doBy包的summaryBy函数。在上面的ffdfdply函数中,我们在一些关键列的基础上拆分数据。如果键列包含2个或更多字段的组合,则可以使用ikey函数生成键列

>ffobject$KeyColumn <- ikey(ffobject[c(“Col1″,”Col2″,”Col3”)])

  

具有诸如使用大数据和较少依赖于RAM的各种优点,ff具有很少的限制,例如

1、巨大的数据集执行复杂的操作时,我们需要以速度来妥协
2、使用ff开发并不容易
3、需要关心存储在磁盘中的文件,否则您的HDD或外部介质留有很少或没有空间。

 
 
 
时间: 2024-10-01 02:39:16

深入ff and ffbase的相关文章

R语言高性能编程(二)

接着上一篇 一.减少内存使用的简单方法1.重用对象而不多占用内存 y <- x 是指新变量y指向包含X的那个内存块,只有当y被修改时才会复制到新的内存块,一般来说只要向量没有被其他对象引用,就可以正常修改,以避免复制向量带来的CPU和RAM开销.按照程序属于来说,R是按值传递,应该避免使用sort 类似的函数,会返回一个副本,资源开销至少和原对象一样大,甚至更大2.删除不在需要的中间数据注意 在调用rm()的时候,内存不会被立即释放并交还到操作系统,而是在必要的时候,或者当已删除对象的内存量超过

jQuery源码解析

( function( global, factory ) { "use strict"; if ( typeof module === "object" && typeof module.exports === "object" ) { module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) {

Selenium FF WebDriver 加载firebug 和设置代理

首先这次使用的webDriver for Firefox的 由于项目的原因,需要在测试的时候加载Firebug和使用vpn,加载代理 Firefox 加载代理,可以从FF菜单上看,代理分为好几种 我这里使用的是type 为2 的情况 FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.proxy.type", 2); profile.setPreference("netwo

IE/FF/Chrome下document.documentElement和document.body的 scrollHeight/scrollTop/clientHeight

IEdocument.documentElement.scrollHeight  浏览器所有内容高度 ,document.body.scrollHeight  浏览器所有内容高度document.documentElement.scrollTop  浏览器滚动部分高度,document.body.scrollTop 始终为0document.documentElement.clientHeight  浏览器可视部分高度,document.body.clientHeight  浏览器所有内容高度

js在IE和FF下的兼容性问题

长久以来JavaScript兼容性一直是Web开发者的一个主要问题.在正式规范.事实标准以及各种实现之间的存在的差异让许多开发者日夜煎熬.为此,主要从以下几方面差异总结IE和Firefox的Javascript兼容性: 一.函数和方法差异: 二.样式访问和设置: 三.DOM方法及对象引用: 四.事件处理: 五.其他差异的兼容处理. 一.函数和方法差异 1. getYear()方法 [分析说明]先看一下以下代码: [javascript] view plaincopy var year=new D

原生js绑定和解绑事件,兼容IE,FF,chrome

主要是最近项目中用到了原生的js 解绑和绑定 事件  然后今天研究了一下,其实问题不大,不过要注意不要把单词写错了,今天我就找了好久单词写错了. 需求:当鼠标移上去以后,给Select加载元素,接着解除这个事件.贴上代码,这个是可以运行的,兼容 IE FF chrome 1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu

浏览器兼容性问题解决方案之CSS,已在IE、FF、Chrome测试

当前主浏览器的核心是什么? 1) Trident:IE浏览器使用的内核,该内核程序在1997年的IE4中首次被采用,是微软在Mosaic代码的基础之上修改而来的,并沿用到目前的 IE7.Trident实际上是一款开放的内核,其接口内核设计的相当成熟,因此才有许多采用IE内核而非IE的浏览器涌现(如 Maxthon.TheWorld .TT.GreenBrowser.AvantBrowser等). 2) Geckos: Netcape6开始采用的内核,后来的FF也采用了该内核,Geckos的特点是

Codeforces Round #FF(255) C. DZY Loves Sequences (LIS升级)

题目:C. DZY Loves Sequences (LIS升级) 题意: 在n个数中,最多改变一个数字,并求能够达到的最长严格上升子序列(连续)长度 分析: 考虑第i个数,能否改变后拼接前后两个字串,并维护当前最大值 状态: left[i]:  表示以i为终点的最长严格上升子序列长度 right[i]: 表示以i为起点的最长严格上升子序列长度 dp[i]:   表示改变第i个数后,拼接前后字串的长度 转移方程:       dp[i] = max{left[i-1] + right[i+1] 

自定义浏览器滚动条的样式,打造属于你的滚动条风格——兼容IE和webkit(ff不支持)

前段时间,到网上找素材时,看到了一个很个性的滚动条式,打开Chrome的调试工具看了一下,发现不是用JavaScript来模拟实现的,觉得 有必要折腾一下.于是在各大浏览器中对比了一下,发现只用Chrome适用,也就是说这个用的是Chrome的私有CSS属性.便百之谷之后,发现原来不 仅仅只用Chrome,其它的浏览器在不同程度上支持自定义滚动条样式的.下面是我不断测试的结果,若有错误或不全,请在评论里面给出,我会立马更正:若 有更好的方案,你可以留言,让大家都开开眼界...... 自定义IE浏