Огромный файл в Clojure и Java heap space error

Ранее я размещал сообщения в огромном XML-файле— это 287-гигабайтный XML-файл с дампом Википедии, который я не хочу помещать в CSV-файл (авторы ревизий и временные метки). Мне это удавалось до определенного момента. Раньше я получал ошибку StackOverflow, но теперь, после решения первой проблемы, я получаю: java.lang.OutOfMemoryError: ошибка пространства кучи Java.

Мой код (частично взятый из ответа Джастина Крамера) выглядит так:

(defn process-pages
  [page]
  (let [title     (article-title page)
        revisions (filter #(= :revision (:tag %)) (:content page))]
    (for [revision revisions]
      (let [user (revision-user revision)
            time (revision-timestamp revision)]
        (spit "files/data.csv"
              (str "\"" time "\";\"" user "\";\"" title "\"\n" )
              :append true)))))

(defn open-file
[file-name]
(let [rdr (BufferedReader. (FileReader. file-name))]
  (->> (:content (data.xml/parse rdr :coalescing false))
       (filter #(= :page (:tag %)))
       (map process-pages))))

Я не показываю article-title, ревизия-пользователь и ревизия- title, потому что они просто берут данные из определенного места на странице или из хэша ревизии. Любой может помочь мне с этим - я действительно новичок в Clojure и не понимаю проблемы.

6
задан Community 23 May 2017 в 11:49
поделиться