日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/23 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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就是我們要的合并后的數據框。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的bind merge r 和join_R语言并行读取csv:地表最快csv合并方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。