Огромный XML в Clojure - PullRequest
       13

Огромный XML в Clojure

12 голосов
/ 30 марта 2012

Я новичок в Clojure, и мой первый проект имеет дело с огромным (250 + ГБ) XML-файлом. Я хочу поместить его в PostgreSQL для последующей обработки, но понятия не имею, как получить такой большой файл.

Ответы [ 4 ]

19 голосов
/ 30 марта 2012

Я использовал новый clojure.data.xml для обработки дампа Википедии на 31 ГБ на скромном ноутбуке.Старая библиотека 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)))
2 голосов
/ 30 марта 2012

обработка огромного XML обычно выполняется с помощью SAX, в случае Clojure это http://richhickey.github.com/clojure-contrib/lazy-xml-api.html

см (parse-seq File / InputStream / URI)

0 голосов
/ 08 ноября 2012

Вы также можете использовать XML-парсер expresso для больших файлов (www.expressoxml.com). Он может анализировать файлы размером 36 ГБ и более, поскольку он не ограничен размером файла. Он может вернуть до 230 000 элементов из поиска, и он доступен через потоковую передачу через «облако» с их веб-сайта. И лучше всего их версия разработчика бесплатна.

0 голосов
/ 30 марта 2012

Если xml - это набор записей, https://github.com/marktriggs/xml-picker-seq - это то, что вам нужно для обработки записей в xml независимо от размера xml.Он использует XOM под капотом и обрабатывает одну «запись» за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...