Clojure中的巨大XML

trz*_*zek 12 xml clojure

我是Clojure的新手,我的第一个项目必须处理巨大的(250 + GB)XML文件.我想把它放到PostgreSQL中以便稍后处理它,但是不知道如何处理这么大的文件.

Jus*_*mer 19

我用新clojure.data.xml的方法在一台普通的笔记本电脑上处理一个31GB的维基百科转储.旧的lazy-xmlcontrib库对我不起作用(内存耗尽).

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)))
Run Code Online (Sandbox Code Playgroud)

  • 对不起,我忘了提到:我遇到了StackOverflow错误,这是由于Java中的上游错误.解决方法是使用`(data.xml/parse rdr:coalescing false)`,它现在仅适用于`data.xml`的主分支.0.0.3版本没有`:coalescing`选项. (2认同)
  • 与维基百科转储一起使用 - 很好。您需要将其包装在 `with-open` 和 `dorun` 中,以使其懒惰地处理一个大列表: (with-open [rdr (fn-that-opens-a-reader)] (dorun (- >> ...如上所述... (2认同)