如何用R语言的arrow包读取分号分隔的大型CSV文件?
使用Arrow包读取分号分隔的大体积CSV文件
Arrow的read_csv函数虽然没有直接对应readr::read_csv2的封装,但可以通过自定义参数实现完全相同的功能,同时保留Arrow针对大文件的高性能读取优势:
基础用法
直接指定分隔符为分号,并根据你的CSV格式设置小数分隔符(通常read_csv2默认用逗号作为小数标记):
library(arrow) # 读取分号分隔、逗号为小数标记的CSV large_df <- read_csv( file = "your_millions_rows.csv", delimiter = ";", decimal_point = "," )
性能优化技巧
针对数百万行的超大文件,可通过以下参数进一步提升读取速度:
- 提前指定列类型:避免Arrow自动推断列类型的耗时操作,用
schema()定义列结构 - 启用内存映射:设置
memory_map = TRUE,让Arrow直接从磁盘读取数据,减少内存占用 - 跳过无关行:如果文件有注释或非数据行,用
skip参数跳过
示例代码:
# 自定义列类型 schema csv_schema <- schema( user_id = int64(), transaction_amount = float64(), transaction_date = date32(), product_category = string() ) # 优化后的读取方式 large_df <- read_csv( file = "your_millions_rows.csv", delimiter = ";", decimal_point = ",", col_types = csv_schema, memory_map = TRUE, skip = 0 # 若第一行是表头则保持默认,否则设置对应行数 )
额外说明
Arrow的CSV读取引擎原生支持大文件分块读取,即使是数百万行的数据,也能高效处理,同时兼容各种CSV格式细节(如引号转义、空值处理等),无需额外配置即可适配常见的read_csv2场景。
内容的提问来源于stack exchange,提问作者Bastián Olea Herrera
相关产品推荐
相关产品推荐

