繁体   English   中英

如何在R中并行读写csv文件

[英]How to read and write csv files in parallel in R

我有几百万个小(每个几 MB)csv 文件,我需要读入、修改然后写出。 如何在 R 中并行执行此操作? 我尝试了以下方法,但没有任何反应。 我不需要组合任何东西——我只想一次处理多个文件。 我希望这是可能的,否则,我将长期存在。 也许这甚至是不可能的 - 是否可以一次从硬盘驱动器读取和写入多个文件? 我正在运行 Windows 10 操作系统。

registerDoParallel(cores = 2)
foreach (x in 1:100) %:%
    foreach (y in 1:100) %dopar% {
       readr::read_csv(paste0('fake_file',x,'_',y,'csv'))

       # work on files
       readr::write_csv(paste0('fake_file',x,'_',y,'csv'))
}

只需使用 vroom

library(vroom)

vroom("your_path")

这是另一个在幕后使用未来 package 的解决方案

library(tidyverse)

dir.create("example_data")

for (i in 1:10) {
  df <- as.data.frame(matrix(sample(1000),ncol = 10))
  write_csv(df,file = str_c("example_data/",i,"test.csv"))
  
}


# Create a function that does what you want for one file (try to test it)

file_function <- function(file_name){
  df_read <- read_csv(file_name, col_types = cols())
  
  df_processed <- df_read %>% 
    mutate(across(everything(),.fns = ~ .x * 10))
  
  df_processed %>%
    write_csv(file_name)
  
  str_c(file_name," processed")
  
}

# get file names

file_names <- list.files(path = "example_data/",full.names = T)

# furrr functional solution


library(furrr)

# plan execution

# multisession if windows

# multicore if linux or mac

set.seed(123)
plan(multisession,workers = availableCores())


file_names %>% future_map(file_function,.options = furrr_options(seed = TRUE))

# realease memory

plan(sequential)

# realease hd
unlink("example_data",recursive = T)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM