我是Clojure的新手,我的第一个项目必须处理巨大的(250 + GB)XML文件。我想把它放到PostgreSQL中以便稍后处理它,但是不知道如何处理这么大的文件。
答案 0 :(得分:19)
我使用新的clojure.data.xml
在一台适度的笔记本电脑上处理31GB的维基百科转储。旧的lazy-xml
contrib库对我不起作用(内存不足)。
https://github.com/clojure/data.xml
简化示例代码:
(require '[clojure.data.xml :as data.xml]) ;'
(defn process-page [page]
;; ...
)
(defn page-seq [rdr]
(->> (:content (data.xml/parse rdr))
(filter #(= :page (:tag %)))
(map process-page)))
答案 1 :(得分:2)
处理巨大的xml通常是用SAX完成的,如果是Clojure的话 http://richhickey.github.com/clojure-contrib/lazy-xml-api.html
见 (parse-seq File / InputStream / URI)
答案 2 :(得分:0)
如果xml是记录集合,则无论xml大小如何,都需要https://github.com/marktriggs/xml-picker-seq来处理xml中的记录。它在引擎盖下使用XOM并处理一个'记录'一次。
答案 3 :(得分:0)
您还可以将expresso XML解析器用于海量文件(www.expressoxml.com)。它可以解析36GB及更多的文件,因为它不受文件大小的限制。它可以从搜索中返回多达230,000个元素,并可通过其网站上的“云”进行流式传输。最重要的是他们的开发者版本是免费的。