Sono nuovo di Clojure e il mio primo progetto ha a che fare con un enorme file XML (250 + GB). Voglio metterlo in PostgreSQL per elaborarlo in seguito, ma non ho idea di come affrontare un file così grande.Enorme XML in Clojure
risposta
Ho utilizzato il nuovo clojure.data.xml
per elaborare un dump di Wikipedia da 31 GB su un laptop modesto. La vecchia libreria contrib lazy-xml
non ha funzionato per me (esaurito la memoria).
https://github.com/clojure/data.xml
semplificato codice di esempio:
(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)))
quindi questo è ciò a cui @ivant si riferisce? l'implementazione di clojure io per lazy-xml è in qualche modo rotta? –
Sì, ha problemi .Inoltre, fa parte del vecchio contributo di clojure ed è deprecato. "data.xml' è la sostituzione. –
OK - Ho passato qualche ora a provare tutto Possibili combinazioni di ((())) ma senza successo Ottengo l'errore StackOverflow ed è - a quanto ho capito - perché io uso questo: '(with-open [rdr (BufferedReader. (FileReader.)) e dovrebbe usare qualche flusso di input, ma sono nuovo di Clojure e dopo quelle poche ore ... Potresti aiutarmi? – trzewiczek
elaborazione enorme XML di solito è fatto con SAX, in caso di Clojure questo è http://richhickey.github.com/clojure-contrib/lazy-xml-api.html
vedere (analizzare-ss File/InputStream/URI)
L'API può essere pigra, ma IO non lo è, quindi dubito che funzioni su un file di quelle dimensioni. – ivant
@ivant lo colleghi a un flusso di input che legge i dati in modo incrementale. è una pratica standard per l'elaborazione di file xml di grandi dimensioni in java. –
vedi la risposta di Justin per una spiegazione di cosa può riferirsi qui. –
Se l'XML è un insieme di record, https://github.com/marktriggs/xml-picker-seq è ciò che è necessario per elaborare i record in xml indipendentemente dalla dimensione xml. Usa XOM sotto il cofano e processa un 'record' alla volta.
Ho provato anche quello, ma senza successo. Voglio dire - ha fatto il trucco dell'enorme file, ma non riesco a ottenere i reasult con xpath-query - ne escono risultati vuoti. L'unica query xpath che funziona è ".", Ma non è quello che volevo ... Non riuscivo a gestire questo problema per più di due ore ... :( – trzewiczek
È inoltre possibile utilizzare parser XML espresso per file di grandi dimensioni (www.expressoxml.com). Può analizzare file da 36 GB o più in quanto non è limitato dalle dimensioni del file. Può restituire fino a 230.000 elementi da una ricerca ed è disponibile tramite streaming sul "cloud" dal loro sito web. E soprattutto la loro versione per sviluppatori è gratuita.
Anche se non hai provato a mascherare questo annuncio come un consiglio imparziale, è meglio indicare esplicitamente la tua forte affiliazione con quel prodotto. https://twitter.com/Lughnasagh/status/260387856772653056. –
- 1. Mutating XML in Clojure
- 2. Ricerca XML in Clojure
- 3. Clojure doseq genera un codice enorme?
- 4. Emacs Clojure mode indentation tab enorme in alcuni casi
- 5. Clojure XML Parsing
- 6. Come RAW POST enorme file XML con l'arricciatura - PHP
- 7. Come posso utilizzare Nokogiri per scrivere un file XML ENORME?
- 8. Inserimenti in alberi Zipper su file XML in Clojure
- 9. Roundripping xml in Clojure utilizzando clojure.xml/parse e clojure.xml/emit
- 10. Genera un'immagine enorme in C#
- 11. Clojure Editor scritto in Clojure
- 12. In Clojure perché usare: solo []
- 13. supporta sia la risposta REST xml che json nel clojure
- 14. Struttura enorme del grafico
- 15. Come ritagliare un'immagine enorme
- 16. Splitting enorme git repo
- 17. Cleanup enorme Perl Codebase
- 18. Firefox - Cursore enorme
- 19. Impostazione textSize in vista risultati personalizzati in enorme testo
- 20. ViewFlipper con ritardo "enorme"
- 21. Creare enorme dizionario
- 22. ordinamento di un file enorme in Java
- 23. Dimensione carattere inutilizzabile enorme in Android Studio
- 24. Esegui un modulo in un numero enorme?
- 25. Come dividere un file enorme in parole?
- 26. Nomi simili in una lista enorme
- 27. Come implementare una matrice enorme in C
- 28. Lettura da un enorme MemoryStream in C#
- 29. Come importare un file enorme in PostgreSQL?
- 30. Ignorare riferimenti null durante la serializzazione di un enorme documento XML
Inizia comprendendo come avvicinarsi a un file piccolo, quindi lavorare. –
Che aspetto ha questo XML? Collezione altamente arborescente o piatta di numerosi articoli? – cgrand
Arborescent - ottima parola! +1 –