我之前在stackoverflow上发布了一篇关于大型XML文件的帖子——这是一个287GB的Wikipedia转储XML文件,我想将其转换为CSV文件(包括修订版本、作者和时间戳)。我已经成功做到了某种程度。之前我遇到了StackOverflow错误,但现在我解决了第一个问题后,出现了Java堆空间错误:java.lang.OutOfMemoryError。
我的代码(部分参考了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方面真的很新,不太明白这个问题。
OutOfMemoryError: Java heap space
的错误。我正在处理一个1GB大小的最终文件样本,但仍然出现内存错误。非常感谢任何帮助。 - trzewiczek