使用 `readr::read_csv_chunked()`批量读取csv文件

标签 r csv chunks readr

我想读取较大的csv文件,但遇到内存问题。因此,我想尝试使用read_csv_chunked()包中的readr读取它们。我的问题是我不太了解callback参数。

这是到目前为止我尝试过的一个最小的示例(我知道我必须将所需的操作包含在f()中,否则就内存使用而言没有优势,对吧?):

library(tidyverse)
data(diamonds)
write_csv(diamonds, "diamonds.csv") # to have a csv to read

f <- function(x) {x}
diamonds_chunked <- read_csv_chunked("diamonds.csv", 
                                     callback = DataFrameCallback$new(f),
                                     chunk_size = 10000)

我试图使callback参数与官方文档中的示例保持接近:
# Cars with 3 gears
f <- function(x, pos) subset(x, gear == 3)
read_csv_chunked(readr_example("mtcars.csv"), 
                 DataFrameCallback$new(f), 
                 chunk_size = 5)

但是,我收到下面的错误,由于我看到进度条移至18%,因此似乎在读取第一个块之后出现。

Error in eval(substitute(expr), envir, enclos) : unused argument (index)



我已经尝试在f()中包含要进行的操作,但是仍然遇到相同的错误。

最佳答案

我发现要在DataFrameCallback$new()中调用的函数始终需要有一个附加参数(本文档示例中的pos)。不必使用该参数,因此我并不真正理解其目的。但至少,它以这种方式工作。

有谁知道关于第二个论点的更多细节?

关于使用 `readr::read_csv_chunked()`批量读取csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43677277/

相关文章:

python - 如何将文本文件拆分成 block ?

R markdown 与 Chunk 的交互选项

r - 加载 ggplot2(实际上是色彩空间)打开 x11

r - 包 'ggplot2' 不适用于 R 版本 3.5.1

mysql - LOAD DATA INFILE,在包含微秒的时间戳周围加上引号

java - 如何使用 Java 在 MySQL 数据库中导入制表符分隔文件?

hadoop - 关于 Hadoop 中的局部性问题和 block 管理

R 转换多个变量的最佳方法是什么?

r - ggplot2每一组仅包含一个观察值

java - FilenameUtils.getExtension 比较返回 false