我是Clojure的新手,我的第一个项目需要处理一个庞大的XML文件(250+GB)。我想把它放入PostgreSQL中以便以后处理,但不知道如何处理这么大的文件。
我使用了新的clojure.data.xml
库,在一台性能一般的笔记本上处理了一个31GB大小的维基百科转储文件。旧的lazy-xml
贡献库无法工作(内存不足)。
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)))
data.xml
是替代品。 - Justin Kramer(with-open [rdr (BufferedReader. (FileReader. file-name))]
而应该使用一些输入流,但我对Clojure还很陌生,在这几个小时之后...你能帮忙吗? - trzewiczek(data.xml/parse rdr :coalescing false)
,但目前只适用于data.xml
的主分支。0.0.3版本没有:coalescing
选项。 - Justin Kramerwith-open
和 dorun
中,以便能够懒惰地通过大列表进行工作:(with-open [rdr (fn-that-opens-a-reader)] (dorun (->> ...与上述相同... - Korny您还可以使用expresso XML解析器处理大文件(www.expressoxml.com)。它可以解析36GB或更大的文件,因为它不受文件大小限制。它可以从搜索中返回多达230,000个元素,并且可以通过其网站上的“云”进行流式传输。最重要的是,他们的开发者版本是免费的。