bind merge r 和join_R语言并行读取csv:地表最快csv合并方法

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言数据高效处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书,《R语言数据高效处理指南》(黄天元)【简介_书评_在线阅读】 - 当当图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。

以前有多个csv要合并成一个(文件所有的列一般都是一致的),把文件路径设置到那里,然后写一个循环一个一个读,然后每个循环后面就使用rbind/bind_rows合在一起。比如:

library(tidyverse)# 假设已经在csv文件所在路径dir() %>% str_subset(".csv$") -> fn
all = tibble()
for(i in fn){read_csv(i) %>%bind_rows(all) -> all
}

为了充分利用计算机的所有性能,让读取更加迅速,我在多次试错下,终于写下这么一段代码:

library(pacman)
p_load(doParallel,data.table,dplyr,stringr,fst)# 识别所在文件路径下所有的csv文件名称
dir() %>% str_subset(".csv$") -> fn# 并行计算环境设置
(cl = detectCores() %>% makeCluster()) %>% registerDoParallel()# 并行读取csv,并进行合并
system.time({big_df = foreach(i = fn,.packages = "data.table") %dopar% {fread(i,colClasses = "character")} %>% rbindlist(fill = T)
})# 停止并行环境
stopCluster(cl)# 读出文件
write_fst(big_df,"big_df.fst",compress = 100)# fwrite(big_df,"bid_df.csv")

这是我目前探索出来能够最快速度合并任意文件夹任意数量csv的代码,没有之一。计算机的核越多,效果越明显。fread的快速在当前是无可匹敌的,而colClasses参数的设置,让读取不需要进行过多的数据类型判断,这样在最后合并的时候也就不会报错。rbindlist是data.table中专门用来合并列表中data.table的函数,fill设置为TRUE可以提高容错性(如果多个数据表中列名称不同,会填充NA值)。最后,合并成一个巨大的数据框,存在big_df中,建议使用fst包来读出,compress开到尽头设置为100,可以实现最大的压缩和快速读写,空间时间双节省(如果一定需要csv格式的话,也可以用fwrite读出)。我想这样的数据表可能永远也不会需要完全读入,fst支持部分读取功能(读取部分行或列),因此fst这个格式是非常合适的。


2020/04/29更新:新的方案

if (!require("pacman")) install.packages("pacman")
pacman::p_load(future.apply, data.table, stringr)# get the file name
dir() %>% str_subset(".csv$") -> fnplan(multiprocess)future_lapply(fn,fread,colClasses = "character") %>% rbindlist(fill = TRUE) -> res

res就是我们要的合并后的数据框。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fanuc机器人编程手册_是谁需要G代码编程机器人?

用G代码编程机器人是一个5,6年前就碰到过的一个概念。当时就有点困惑,不过没有细究为何提出这样的想法。这个问题一直搁置很久也没有想起来主动去了解,去和同行去交流。今天在翻阅西门子自动化产品手册时,看到SINUMERIK产品介绍后…

java各个平台订单动态对接_平台订单丨全国各地最新采购、代加工订单,免费联系对接...

寻求:地铁闸机加工件定制加工需要两种闸机,一种扇门,一种旋转扇门,两必须都按照图纸加工,请仔细审核图纸,欢迎有实力的友商前来洽谈,不符勿扰,谢谢!求购:镀锌…

零基础入门c语言免费教程,C语言零基础急速入门免费教程不定期更新

很多粉丝问我陈老师为什么你会教c语言和java语言?因为名字中”陈“字的汉语拼音中“chen””陈“,和“c”语言是同一个首字母“c”,所以我教“c”语言。又因为同学、学生、粉丝、朋友、同事、亲人们叫我杰哥,汉语拼音中的”jie“&…

python单词什么意思_“逐字逐句”是什么意思?语法在Python中意味着什么?

I see the following script snippet from the gensim tutorial page. Whats the syntax of word for word in below Python script? >> texts [[word for word in document.lower().split() if word not in stoplist] >> for document in documents] 解决方案 T…

c语言用队列stl加头文件,C++ STL List队列用法(实例)

#include #include #include #includeusing namespace std;//创建一个list容器的实例LISTINTtypedef listLISTINT;//创建一个list容器的实例LISTCHARtypedef listLISTCHAR;void main(void){//--------------------------//用list容器处理整型数据//--------------------------/…

android 复制u盘文件到手机本地_原来把手机资料传到U盘里这么简单!

故事的源起是这样的,有绿豆粉犯愁:怎样能把手机里的资料直接传到U盘里啊,不然太不方便了。以小编这种古道热肠侠骨柔情怜香惜玉的性子,怎么可能坐视不管呢?不然妹子会伤心的~于是小编就苦思冥想啊,熬了一夜…

当退出python时是否释放全部内存_python 关于高级特性的问题

1.函数装饰器有什么作用?请列举说明? 2. Python 垃圾回收机制? 3. 魔法函数 _call_怎么使用? 4. 如何判断一个对象是函数还是方法? 5. classmethod 和 staticmethod 用法和区别 6. Python 中的接口如何实现? 7. Python 中的反射了解么? 8. metaclass 作用?以及应用场景…

android 流量统计工具,Android 统计应用流量的使用情况

Android 获取应用流量的使用情况有两种方法TrafficStatsNetworkStatsManager 是Android 6.0(API23)中新增加的类这次我们使用的是第二种方法,记录一下实现过程首先说明NetworkStatsManager能提供哪些功能区分 Wifi 和手机网络的流量使用查询指定应用的流量使用查询指…

平台型时间信号强度曲线_哥测的不是BET,是氮气等温吸脱附曲线

平时经常会说去测个BET,看看材料比表面积多大,孔径分布如何,其实我们测试的并不是BET,而是氮气等温吸脱附曲线,测试得到的数据是氮气等温吸脱附曲线,比表面积、孔径分布都是通过公式计算得到的。所以本文旨…

python整数类型在每一台计算机上的取值范围是一样的_人工智能第一章:Python语言基础...

1 Python简介 Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。 1.1 起源 Python的作者是著名的…

android震动服务能设置时长么,Android实现手机振动设置的方法

本文实例讲述了Android实现手机振动设置的方法。分享给大家供大家参考。具体如下:main.xml布局文件:android:orientation"vertical" android:layout_width"fill_parent"android:layout_height"fill_parent">android:la…

lua正则替换_lua 字符串 正则表达式 转义 特殊字符

string.gsub 函数有三个参数:目标串,模式串,替换串。 基本作用是用来查找匹配模式的串,并将使用替换串其替换掉: s = string.gsub("Lua is good", "good", "bad?") print(s) --> Lua is bad string.gsub 的第二个返回值表示进行替换操…

请概述可视化卷积神经网络的中间输出的基本思想。_最详细的卷积神经网络入门指南!...

编辑:murufengDate:2020-05-15来源:深度学习技术前沿微信公众号链接:干货|最全面的卷积神经网络入门教程卷积神经网络简介卷积网络 (convolutional network)(LeCun, 1989),也叫做卷积神经网络 (convolutional neural n…

java类与对象实验报告心得体会_Java类与对象实验报告.doc

西 安 邮 电 大 学(计算机学院)课内实验报告实验名称: 类与对象专业名称: 计算机科学与技术班 级: 计科1405班学生姓名: 高宏伟学 号: 指导教师: 刘霞林实验日期: 2016.9.29一、实验目的通过编程…

linux date fmt,date_format(date,frm) 详解

DATE_FORMAT(date,format)Formats the datevalue according tothe format string.The following specifiers may be used in theformat string. The“%”character is requiredbefore format specifier characters.SpecifierDescription%aAbbreviated weekday name(Sun..Sat)%b…

python numpy和pandas库的区别_python – 来自熊猫和numpy的意思不同

简洁版本: 之所以不同,是因为在调用平均操作时,pandas会使用瓶颈(如果已安装),而不是仅仅依赖于numpy.据推测,瓶颈似乎比numpy更快(至少在我的机器上),但代价是精确度.它们碰巧匹配64位版本,但32位不同(这是有趣的部分). 长版: 通过检查这些模块的源代码…

python实现数据恢复软件_pyinstaller还原python代码过程图解

这篇文章主要介绍了pyinstaller还原python代码过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下pyinstaller 的作用就是将python打包成对应平台的可执行文件。一般这种可执行文件的体积都比较大。我们可以…

android 截图 listview,Android屏幕及view的截图实例详解

Android屏幕及view的截图实例详解屏幕可见区域的截图整个屏幕截图的话可以用View view getWindow().getDecorView();public static Bitmap getNormalViewScreenshot(View view) {view.setDrawingCacheEnabled(true);view.buildDrawingCache();return view.getDrawingCache();}…

python指定位置写入文件_Python从文件中读取指定的行以及在文件指定位置写入

Python从文件中读取指定的行以及在文件指定位置写入 Python从文件中读取指定的行 如果想根据给出的行号, 从文本文件中读取一行数据, Python标准库linecache模块非常适合这个任务: 测试文件内容 : This is line 1. This is line 2. This is l…

华硕 x86 android,【华硕X79评测】学不会不收费 几步教你安装Android x86-中关村在线...

安装Android x86其实并不困难【中关村在线】华硕X79评测: 话说最近操作系统这个话题非常火爆。也许是借助于Windows 8消费者预览版的光芒,凡是与系统搭边的东西大家好像都喜欢与Windows 8进行比较。介于现在可以使用的系统众多,其中Android x…