Ранее я размещал сообщения в огромном 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 и не понимаю проблемы.