【问题标题】:why does this Clojure code run out of memory?为什么这个 Clojure 代码内存不足?
【发布时间】:2013-06-19 01:45:11
【问题描述】:

我有一个两千万行的排序文本文件。它有很多重复的行。我有一些 Clojure 代码可以计算出每个唯一行有多少个实例,即输出类似于:

alpha 20
beta 17
gamma 3
delta 4
...

该代码适用于较小的文件,但在这个较大的文件上,它会耗尽内存。我究竟做错了什么?我假设我在某个地方抓住了头。

(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")

【问题讨论】:

    标签: clojure


    【解决方案1】:

    您的bi-grams 变量正在占用line-seq 的头部。

    试试(quick-process (line-seq (io/reader "the-big-input-file.txt")) "output.txt")

    【讨论】:

    • 在 clojure 中抓住 seq 的头部实际上会让你抓住头部
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2020-09-20
    • 2010-10-24
    相关资源
    最近更新 更多