标签: vroom

Vroom/fread 无法读取大型 .csv 文件 - 无法对其进行内存映射

我有一个.csv112GB 的文件,但既无法vroom打开也data.table::fread无法打开。即使我要求读取 10 行或仅几列,它也会抱怨映射错误:无法分配内存。

    df<-data.table::fread("FINAL_data_Bus.csv", select = c(1:2),nrows=10)
System errno 22 unmapping file: Invalid argument
Error in data.table::fread("FINAL_data_Bus.csv", select = c(1:2), nrows = 10) : 
  Opened 112.3GB (120565605488 bytes) file ok but could not memory map it. This is a 64bit process. There is probably not enough contiguous virtual memory available.
Run Code Online (Sandbox Code Playgroud)

read.csv另一方面会愉快地读十行。

为什么不vroom使用fread通常的 altrep 来读取它,即使是 10 行?

r data.table vroom

6
推荐指数
1
解决办法
1521
查看次数

使用 vroom 在 R 中部分读取非常大的 csv.gz

我有一个 csv.gz 文件(据我所知)压缩前的大小为 70GB。我的机器有 50GB 的 RAM,所以无论如何我永远无法在 R 中打开它。

例如,我可以按如下方式加载前 10m 行:

library(vroom)

df <- vroom("HUGE.csv.gz", delim= ",", n_max = 10^7)
Run Code Online (Sandbox Code Playgroud)

对于我必须做的事情,可以一次加载 10m 行,执行我的操作,然后继续接下来的 10m 行。我可以循环执行此操作。

因此,我正在尝试skip论证。

df <- vroom("HUGE.csv.gz", delim= ",", n_max = 10^7, skip = 10^7)
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

Error: The size of the connection buffer (131072) was not large enough
to fit a complete line:
  * Increase it by setting `Sys.setenv("VROOM_CONNECTION_SIZE")`
Run Code Online (Sandbox Code Playgroud)

我增加了这个Sys.setenv("VROOM_CONNECTION_SIZE" = 131072*1000),但是,错误仍然存​​在。

这个问题有方法解决吗?

编辑:我发现随机访问 gzip 压缩的 csv (csv.gz) 是不可能的。我们必须从头开始。可能最简单的方法是解压并保存,然后跳过就可以了。

csv r vroom

5
推荐指数
1
解决办法
263
查看次数

为什么vroom这么慢?

我有一个简单的操作,我读取几个 csv,绑定它们,然后导出,但vroom执行速度比其他方法慢得多。我肯定做错了什么,但我不确定是什么,或者为什么。

library(readr)
library(vroom)
library(data.table)
library(microbenchmark)

write_csv(mtcars, "test.csv")

microbenchmark(
  readr={
    t <- read_csv("test.csv", col_types=cols())
    write_csv(t, "test.csv")
  },data.tabl={
    t <- fread("test.csv")
    fwrite(t, "test.csv", sep=",")
  },vroom={
    t <- vroom("test.csv", delim=",", show_col_types = F)
    vroom_write(t, "test.csv", delim=",")
  },
  times=10
)
#> Unit: milliseconds
#>       expr       min        lq      mean    median        uq        max neval
#>      readr 12.636961 12.662955 15.865400 12.928211 13.503029  41.104583    10
#>  data.tabl  2.200815  2.275252  2.633456  2.342797  2.529283   4.830134    10
#>      vroom 57.376353 57.915135 64.280365 58.496847 58.966311 117.150837    10
Run Code Online (Sandbox Code Playgroud)

由reprex 包 …

r tidyverse vroom

0
推荐指数
1
解决办法
570
查看次数

标签 统计

r ×3

vroom ×3

csv ×1

data.table ×1

tidyverse ×1