将 ndjson 导入 R 跳过前 n 行
import ndjson into R skip first n lines
如何将大 ndjson (20GB) 文件逐块读取到 R 中?
我有一个大数据文件,我想一次读取 1M 行。
目前,我正在使用以下代码将数据加载到 R 中。
jsonlite::stream_in(
file(fileName)
)
但我不需要将所有数据一起加载。我怎样才能将这个文件拆分成块以更快地加载?
如果您不想升级和使用 Drill,这将适用于任何系统 zcat
(或 gzcat
)和 sed
live:
stream_in_range <- function(infile, start, stop, cat_kind = c("gzcat", "zcat")) {
infile <- path.expand(infile)
stopifnot(file.exists(infile))
gzip <- (tools::file_ext(infile) == "gz")
if (gzip) cat_kind <- match.arg(cat_kind, c("gzcat", "zcat"))
start <- as.numeric(start[1])
stop <- as.numeric(stop[1])
sed_arg <- sprintf("%s,%sp;", start, stop, (stop+1))
sed_command <- sprintf("sed -n '%s'", sed_arg)
if (gzip) {
command <- sprintf("%s %s | %s ", cat_kind, infile, sed_command)
} else {
command <- sprintf("%s %s", sed_command, infile)
}
ndjson::flatten(system(command, intern=TRUE), "tbl")
}
stream_in_range("a-big-compressed-ndjson-file.json.gz", 100, 200)
stream_in_range("a-big-uncompressed-nsjdon-file.json", 1, 10)
选择 and/or 添加一个不同的 cat_kind
适合您的任何内容。
如何将大 ndjson (20GB) 文件逐块读取到 R 中?
我有一个大数据文件,我想一次读取 1M 行。
目前,我正在使用以下代码将数据加载到 R 中。
jsonlite::stream_in(
file(fileName)
)
但我不需要将所有数据一起加载。我怎样才能将这个文件拆分成块以更快地加载?
如果您不想升级和使用 Drill,这将适用于任何系统 zcat
(或 gzcat
)和 sed
live:
stream_in_range <- function(infile, start, stop, cat_kind = c("gzcat", "zcat")) {
infile <- path.expand(infile)
stopifnot(file.exists(infile))
gzip <- (tools::file_ext(infile) == "gz")
if (gzip) cat_kind <- match.arg(cat_kind, c("gzcat", "zcat"))
start <- as.numeric(start[1])
stop <- as.numeric(stop[1])
sed_arg <- sprintf("%s,%sp;", start, stop, (stop+1))
sed_command <- sprintf("sed -n '%s'", sed_arg)
if (gzip) {
command <- sprintf("%s %s | %s ", cat_kind, infile, sed_command)
} else {
command <- sprintf("%s %s", sed_command, infile)
}
ndjson::flatten(system(command, intern=TRUE), "tbl")
}
stream_in_range("a-big-compressed-ndjson-file.json.gz", 100, 200)
stream_in_range("a-big-uncompressed-nsjdon-file.json", 1, 10)
选择 and/or 添加一个不同的 cat_kind
适合您的任何内容。