首页 > 解决方案 > 单台笔记本电脑上 70 GB 文本文件的快速(特定)字数统计

问题描述

我有一个重 70GB 的原始文本文件,超过 1B 行不同长度,不涉及列,原始文本。

我希望扫描它并简单地计算预定义集合中每个单词search_words出现的次数(大小~100)。目前我正在read_lines_chunkedreadr包中使用,读取 100K 行块,调用一个更新全局的callable函数,如下所示:fcounter

library(tidyverse)

write_lines("cat and dog\r\ndog\r\nowl\r\nowl and cat", "test.txt")

search_words <- c("cat", "dog", "owl") # real size is about 100

counter <- numeric(length(search_words))

regex_word <- function(w) str_c("\\b", w, "\\b")

search_words <- map_chr(search_words, regex_word)

count_word <- function(i, chunk) sum(str_count(chunk, search_words[i]))

f <- function(x, pos) {
  counter <<- counter + map_int(1:length(search_words), count_word, x)
}

read_lines_chunked("test.txt", SideEffectChunkCallback$new(f), chunk_size = 100000)

这很好用,而且在我的 8 核 Windows 10 16GB RAM 笔记本电脑上不到 24 小时,如果它是一次性的努力,也不算太糟糕。但时间至关重要。是否有任何解决方案涉及text,而不是表格 CSV(如data.table's fread),可以在一台笔记本电脑上快速完成此操作?最好是read_lines_chunked优雅的东西。

我想到的可能的解决方案,但无法让它们与原始文本或分块一起使用:

标签: rreadr

解决方案


推荐阅读