Tôi mới dùng Clojure và dự án đầu tiên của tôi phải xử lý tệp XML khổng lồ (250 + GB). Tôi muốn đưa nó vào PostgreSQL để xử lý sau này, nhưng không có ý tưởng làm thế nào để tiếp cận một tập tin lớn như vậy.XML khổng lồ ở Clojure
Trả lời
Tôi đã sử dụng clojure.data.xml
mới để xử lý kết xuất Wikipedia 31GB trên máy tính xách tay khiêm tốn. Thư viện cộng đồng cũ lazy-xml
không hoạt động đối với tôi (hết bộ nhớ).
https://github.com/clojure/data.xml
Giản mã ví dụ:
(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)))
vì vậy đây là những gì @ivant đề cập đến? thực hiện clojure io cho lười biếng-xml bị hỏng bằng cách nào đó? –
Có, nó có vấn đề.Tất cả, đó là một phần của contrib clojure cũ và không được chấp nhận '' data.xml' là sự thay thế –
OK - Tôi đã dành một vài giờ cố gắng tất cả các có thể kết hợp của ((())) nhưng không thành công.Tôi nhận được StackOverflow Lỗi và nó - như tôi hiểu nó - bởi vì tôi sử dụng này: '(with-open [rdr (BufferedReader. (FileReader.))] ' và nên sử dụng một số luồng đầu vào, nhưng tôi mới sử dụng Clojure và sau vài giờ đó ... Bạn có thể trợ giúp không? – trzewiczek
chế biến xml khổng lồ thường được thực hiện với SAX, trong trường hợp Clojure đây là http://richhickey.github.com/clojure-contrib/lazy-xml-api.html
thấy (phân tích-seq File/InputStream/URI)
API có thể hơi lười, nhưng IO thì không, vì vậy tôi nghi ngờ nó sẽ hoạt động trên một tệp có kích thước đó. – ivant
@ivant bạn kết nối nó với luồng đầu vào đọc dữ liệu theo từng bước. đó là thực hành tiêu chuẩn để xử lý các tệp xml lớn trong java. –
xem câu trả lời của Justin để giải thích về những gì ivant có thể đề cập đến ở đây. –
Nếu xml là một tập hợp các hồ sơ, https://github.com/marktriggs/xml-picker-seq là những gì bạn cần để xử lý các bản ghi trong xml bất kể kích thước xml là bao nhiêu. Nó sử dụng XOM dưới mui xe và xử lý một 'bản ghi' tại một thời điểm.
Tôi cũng đã thử điều đó nhưng không thành công. Tôi có nghĩa là - nó đã làm các trick về các tập tin rất lớn, nhưng tôi không thể nhận được các reasults với xpath truy vấn - kết quả sản phẩm nào đi ra khỏi nó. Truy vấn xpath duy nhất hoạt động là ".", Nhưng nó không phải là những gì tôi muốn ... Không thể quản lý vấn đề này nhiều hơn sau đó hai giờ ... :( – trzewiczek
Bạn cũng có thể sử dụng phân tích cú pháp XML expresso cho các tập tin khổng lồ (www.expressoxml.com). Nó có thể phân tích các tập tin của 36GB và nhiều hơn nữa vì nó không bị giới hạn bởi kích thước tập tin. Nó có thể trở lại lên đến 230.000 yếu tố từ một tìm kiếm và nó có sẵn thông qua streaming trên "đám mây" từ trang web của họ. Và tốt nhất của tất cả các phiên bản phát triển của họ là miễn phí.
Mặc dù bạn chưa cố gắng che giấu quảng cáo này dưới dạng tư vấn khách quan, tốt nhất bạn nên nêu rõ liên kết mạnh mẽ của mình với sản phẩm đó. https://twitter.com/Lughnasagh/status/260387856772653056. –
- 1. Mở các tệp XML khổng lồ và In đẹp
- 2. Đọc tệp XML khổng lồ bằng cách sử dụng tệp StAX và XPath
- 3. Nhập dữ liệu XML khổng lồ (> 1Gb) vào SQL Server 2008 hàng ngày
- 4. Làm thế nào để sửa đổi một tệp XML khổng lồ của StAX?
- 5. Lưu trữ dữ liệu khổng lồ trong SQLite
- 6. Nhập dữ liệu khổng lồ nhanh hơn Get ["raggedmatrix.mx"]?
- 7. Bàn phím khổng lồ trong Eclipse trên Ubuntu
- 8. Xử lý các Blobs khổng lồ trong MySQL?
- 9. Hợp nhất các tập khổng lồ (HashSet) trong Scala
- 10. Vẽ các tệp dữ liệu khổng lồ trong R?
- 11. Nuking tập tin khổng lồ trong kho svn
- 12. Xử lý đồ thị khổng lồ - Nhân viên bán hàng du lịch
- 13. Ruby Parallel/Multithread Programming để đọc cơ sở dữ liệu khổng lồ
- 14. Python đôi lỗi miễn phí cho các tập dữ liệu khổng lồ
- 15. Tôi cần biết gì về làm việc với cơ sở dữ liệu khổng lồ?
- 16. Bulk chèn dữ liệu khổng lồ vào SQLite sử dụng Python
- 17. Báo cáo chuyển mạch khổng lồ cho các nhà xây dựng
- 18. Thay thế tuyên bố chuyển đổi khổng lồ bằng cái gì?
- 19. Làm thế nào để lên kế hoạch cho các dự án phần mềm khổng lồ?
- 20. Tạo tệp PDF lấy dữ liệu khổng lồ từ MySQL bằng cách sử dụng PHP
- 21. Cách tách tệp csv khổng lồ dựa trên nội dung của cột đầu tiên?
- 22. Làm cách nào để tải hình ảnh khổng lồ đến Java qua BufferedImage?
- 23. khổng lồ khác biệt hiệu suất khi sử dụng nhóm bằng vs biệt
- 24. Làm cách nào để nhập * khối dữ liệu khổng lồ vào PostgreSQL?
- 25. Cái nào hiệu quả hơn trong SVG, nhiều đường nhỏ hoặc một đường dẫn khổng lồ?
- 26. Xử lý hình ảnh khổng lồ (có thể trên 30000x30000) bằng Python?
- 27. cách tìm kiếm một từ đã cho từ một cơ sở dữ liệu khổng lồ?
- 28. sao chép dữ liệu ra khỏi một bảng sản xuất khổng lồ
- 29. (Python) Đếm dòng trong một (> 10GB) khổng lồ tập tin càng nhanh càng tốt
- 30. Scala không thể đối phó với các vật thể khổng lồ?
Bắt đầu bằng cách hiểu cách tiếp cận một tệp nhỏ, sau đó làm việc. –
XML này trông như thế nào? Cao arborescent hoặc một bộ sưu tập phẳng của nhiều mặt hàng? – cgrand
Arborescent - từ tuyệt vời! +1 –