【发布时间】:2012-04-16 13:25:21
【问题描述】:
我之前在huge XML file 上发布过——它是一个 287GB 的 XML,带有我想放入 CSV 文件(修订作者和时间戳)的维基百科转储。我设法做到了这一点。在我得到 StackOverflow 错误之前,但现在在解决第一个问题之后我得到:java.lang.OutOfMemoryError: Java heap space error。
我的代码(部分取自 Justin Kramer 的回答)如下所示:
(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、revision-user 和revision-title 函数,因为它们只是从页面或修订哈希中的特定位置获取数据。任何人都可以帮我解决这个问题——我是 Clojure 的新手,没有遇到问题。
【问题讨论】:
标签: clojure heap-memory inputstream