针对在16GB内存系统中读取21GB CSV文件时,使用arrow::read_delim_arrow()函数导致R会话异常终止的问题,可以尝试以下
分块读取CSV文件:将大文件分成多个小文件进行读取,避免一次性读取过多数据占用大量内存。可以使用readr或data.table包的fread()函数分块读取,或者使用Hadoop、Spark等分布式计算框架读取大文件。
使用arrow::read_csv()代替read_delim_arrow():read_csv()函数采用流式读取方式,可以减小内存占用。不过需要注意,arrow::read_csv()目前还处于实验阶段,可能会存在一些问题。
示例代码:
library(data.table) chunk_size <- 1000000 n_chunks <- 21 file_path <- "path_to_large_csv_file.csv"
for (i in 1:n_chunks) { start_row <- (i-1) * chunk_size + 1 end_row <- i * chunk_size chunk <- fread(file_path, skip = start_row-1, nrows = chunk_size)
}
library(arrow) large_file <- "path_to_large_csv_file.csv" output_table <- arrow::read_csv(large_file)