3

2,000 万行のソート済みテキスト ファイルがあります。重複する行がたくさんあります。一意の行ごとにインスタンスがいくつあるかを計算する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")
4

1 に答える 1

7

あなたのbi-grams変数はの頭を保持していline-seqます。

試してみてください(quick-process (line-seq (io/reader "the-big-input-file.txt")) "output.txt")

于 2013-06-19T01:51:46.587 に答える