이렇게하면 큰 CSV를 헤더가있는 청크로 나눌 수 있습니다.
#' Split a large CSV file into separate files with \code{chunk_size} records per-file
#'
#' @param path path to the large CSV file
#' @param template path template for saving out the smaller files. Uses \code{sprintf}.
#' @param chunk_size number of records per file
#' @param locale,na,quoted_na,comment,trim_ws passed on to \code{read_csv}
#' @examples
#' csv_split("largefile.csv", chunk_size=10000)
csv_split <- function(path, template="file%05d.csv", chunk_size=1000,
locale=default_locale(), na=c("", "NA"), quoted_na=TRUE,
comment="", trim_ws=TRUE) {
require(readr)
path <- path.expand(path)
csv_spec <- spec_csv(path)
skip <- 0
part <- 1
repeat {
df <- read_csv(path, col_names=names(csv_spec$cols), col_types=csv_spec,
locale=locale, na=na, quoted_na=quoted_na, comment=comment,
trim_ws=trim_ws, skip=skip, n_max=chunk_size)
if (nrow(df) == 0) break
cat(sprintf("Writing [%s]...\n", sprintf(template, part)))
write_csv(df, sprintf(template, part))
part <- part + 1
skip <- skip + chunk_size
}
}
예 :
library(readr)
df <- data.frame(name=sample(LETTERS, 1000000, replace=TRUE),
age=sample(30:100, 1000000, replace=TRUE))
write_csv(df, "allinone.csv")
csv_split("allinone.csv", chunk_size=50000)
## Writing [file00001.csv]...
## Writing [file00002.csv]...
## Writing [file00003.csv]...
## Writing [file00004.csv]...
## Writing [file00005.csv]...
## Writing [file00006.csv]...
## Writing [file00007.csv]...
## Writing [file00008.csv]...
## Writing [file00009.csv]...
## Writing [file00010.csv]...
## Writing [file00011.csv]...
## Writing [file00012.csv]...
## Writing [file00013.csv]...
## Writing [file00014.csv]...
## Writing [file00015.csv]...
## Writing [file00016.csv]...
## Writing [file00017.csv]...
## Writing [file00018.csv]...
## Writing [file00019.csv]...
## Writing [file00020.csv]...
## Writing [file00021.csv]...
이 [수 |한다] chunk_size
갖는 첫번째 파일의 에지 경우 처리하도록 수정 - 1 기록 거기 주석되는 라인의 가능성.
실제 분할에 이것을 사용하지 않으면 최소한 열 머리글을 가져 오거나 사용하는 예제 코드가 있어야합니다.
당신은 data.table에서 fread를 시도 했습니까? –
예 오류가 발생했습니다. "1183748 행의 0.0 % 읽기. 마무리 중 오류 : 9.0MB 크기의 벡터를 할당 할 수 없습니다." –
모든 것이 메모리에 맞지 않으면 몇 개의 열만 읽으려고합니까? 한 번에? 메모리가 없다면 R이 시스템에 더 많은 메모리를 추가하는 것을 제외하고는 메모리에 모든 것을 보유 할 수 있도록 할 수 없습니다. – hrbrmstr