Я пытаюсь 1) прочитать большой CSV (44 ГБ) в R, используя новую функцию read_csv_chunkwise в пакете chunked, затем 2) отфильтровать только строки, соответствующие вектору идентификаторов, которые я хочу сохранить.
Когда я пытаюсь собрать куски и записать выходной файл, я получаю сообщение об ошибке: «Ошибка в .local (x, ...): сбой при преобразовании в int; строка = 1072921; столбец = 1; строка = '2е + 05'». Я думаю, что при написании этого файла (используя fwrite) он преобразовал длинные числа в научную нотацию c. В фрагментарной документации (https://www.rdocumentation.org/packages/chunked/versions/0.2.1/topics/read_csv_chunkwise) я не вижу аргумента colClasses () или чего-либо подобного.
library(tidyverse)
library(chunked)
to_keep_vec <- seq(from = 100, to = 4000000, by = 500) # vector of ~8000 ids
big_file <- "pathtolargefile.csv" # 44GB csv with ~8 character and numeric columns
# read in chunks
file_chunked <-
read_csv_chunkwise(big_file,chunk_size = 100000L,header = TRUE,stringsAsFactors = FALSE,sep = ",") %>%
filter(id %in% to_keep_vec) # this works, but it hasn't processed anything yet
# process
system.time(file_out <- collect(file_chunked)) # Error in .local(x, ...):Conversion to int failed; line=1072921; column=1; string='2e+05'
Я пробовал установить параметр (scipen = 999) перед чтением кусками и преобразовать в цифру c перед сбором
file_chunked$id <- as.numeric(as.character(file_chunked$id))
Но я получаю ту же ошибку. Я думаю, что есть способы сделать это с помощью fread в al oop, но мне действительно нравится интуитивно понятный синтаксис.