我有一个二千万行,已排序的文本文件。它有很多重复的行。我有一些Clojure代码可以计算每个唯一行的实例数,即输出类似于:
alpha 20
beta 17
gamma 3
delta 4
...
该代码适用于较小的文件,但在较大的文件上,它会耗尽内存。我究竟做错了什么?我认为在某个地方我会坚持到底。 p>
(require '[clojure.java.io :as io])
(def bi-grams (line-seq (io/reader "the-big-input-file.txt")))
(defn quick-process [input-list filename]
(with-open [out (io/writer filename)] ;; e.g. "train/2gram-freq.txt"
(binding [*out* out]
(dorun (map (fn [[w v]] (println w "\t" (count v)))
(partition-by identity input-list)))
(quick-process bi-grams "output.txt")
答案 0 :(得分:7)
您的bi-grams
变量正在抓住line-seq
的头部。
尝试(quick-process (line-seq (io/reader "the-big-input-file.txt")) "output.txt")
。