Soy nuevo en Clojure y mi primer proyecto tiene que ver con un gran archivo XML (250 + GB). Quiero ponerlo en PostgreSQL para procesarlo más adelante, pero no tengo idea de cómo acercarme a un archivo tan grande.Enorme XML en Clojure
Respuesta
Utilicé el nuevo clojure.data.xml
para procesar un volcado de Wikipedia de 31GB en una modesta computadora portátil. La antigua biblioteca contrib lazy-xml
no funcionó para mí (se quedó sin memoria).
https://github.com/clojure/data.xml
simplificado código de ejemplo:
(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)))
, ¿a esto se refiere @ivant? La implementación de clojure io para lazy-xml se ha roto de alguna manera? –
Sí, tiene problemas. A pesar de todo, es parte del antiguo contributor clojure y está en desuso. 'data.xml' es el reemplazo. –
OK - Pasé unas horas intentando todo posibles combinaciones de ((())) pero sin éxito. Obtengo el error StackOverflow y es, como yo lo entiendo, porque uso esto: '(with-open [rdr (BufferedReader. (FileReader. file-name))] ' y debería usar algún flujo de entrada, pero soy nuevo en Clojure y después de esas pocas horas ... ¿Podría ayudarme? – trzewiczek
procesamiento enorme xml se hace generalmente con SAX, en caso de Clojure esto es http://richhickey.github.com/clojure-contrib/lazy-xml-api.html
ver (analizar-ss Archivo/InputStream/URI)
La API puede ser floja, pero IO no lo es, así que dudo que funcione en un archivo de ese tamaño. – ivant
@ivant lo conecta a un flujo de entrada que lee datos de forma incremental. es una práctica estándar para procesar grandes archivos xml en Java. –
vea la respuesta de Justin para obtener una explicación de a qué se refiere el comentario. –
Si el XML es un conjunto de registros, https://github.com/marktriggs/xml-picker-seq es lo que necesita para procesar registros en xml independientemente del tamaño xml. Utiliza XOM bajo el capó y procesa un 'registro' a la vez.
Lo intenté también, pero sin éxito. Quiero decir que funcionó el truco sobre el gran archivo, pero no puedo obtener los comentarios con xpath-query, los resultados vacíos salen de él. La única consulta xpath que funciona es ".", Pero no es lo que yo quería ... No se pudo solucionar este problema durante más de dos horas ... :( – trzewiczek
También puede utilizar analizador XML expresso para archivos grandes (www.expressoxml.com). Puede analizar archivos de 36 GB y más, ya que no está limitado por el tamaño del archivo. Puede devolver hasta 230,000 elementos de una búsqueda y está disponible a través de la transmisión por la "nube" desde su sitio web. Y lo mejor de todo es que su versión de desarrollador es gratuita.
Aunque no haya tratado de disfrazar este anuncio como un consejo imparcial, es mejor indicar explícitamente su fuerte afiliación con ese producto. https://twitter.com/Lughnasagh/status/260387856772653056. –
- 1. Validar un archivo XML ENORME
- 2. búsqueda XML en Clojure
- 3. Emacs Clojure modo tab-indentation enorme en algunos casos
- 4. Mutación de XML en Clojure
- 5. Clojure XML Parsing
- 6. Archivo enorme en Clojure y error de espacio en montón Java
- 7. ¿Cómo puedo usar Nokogiri para escribir un archivo XML ENORME?
- 8. Inserciones en árboles Zipper en archivos XML en Clojure
- 9. Obteniendo el valor de un elemento en XML en Clojure?
- 10. Leer archivo enorme en Python
- 11. admite respuestas REST tanto xml como json en clojure
- 12. Firefox - Enorme Cursor
- 13. enorme estructura de gráfico
- 14. Dividir enorme repo git
- 15. ViewFlipper tiene retraso "enorme"
- 16. ¿Cómo importar un archivo enorme en PostgreSQL?
- 17. Python - Pequeño cambio en un archivo enorme
- 18. Cómo implementar una matriz enorme en C
- 19. Generar una imagen enorme en C#
- 20. Cómo manejar el enorme formulario
- 21. Cómo recortar una imagen enorme
- 22. Agrupamiento de espacio vectorial enorme
- 23. diámetro de un gráfico enorme
- 24. Ciclos de puntero en clojure
- 25. ¿Cómo manejar una cadena enorme correctamente?
- 26. Analizando una enorme secuencia HTML con Jsoup
- 27. uiwebview y pérdida de memoria enorme
- 28. Python, enorme problema de iteración de rendimiento
- 29. Rubí obtener enésimo elemento de enorme gama
- 30. ¿Cómo combino los resultados de las consultas de filtro zip en un árbol xml en Clojure?
Comience por comprender cómo acercarse a un archivo pequeño, luego realice una búsqueda. –
¿Cómo es esta XML? Altamente arborescente o una colección plana de numerosos artículos? – cgrand
Arborescente - gran palabra! +1 –