2016-07-22 20 views
0

Kontext
Ich arbeite derzeit an einem Projekt mit Osm Daten (Open Street Map). Um geographische Objekte zu manipulieren, muss ich die Daten (eine Osm-XML-Datei) in ein Objekt konvertieren. Das osmar-Paket erlaubt mir dies, aber es kann die rohen xml-Daten nicht parsen.Fehler beim Analysieren einer sehr großen (10 GB) XML-Datei in R mit dem XML-Paket

Der Fehler

Fehler in Paste (Datei, kollabieren = "\ n"): 2^31-1 Bytes

Der Code

überschreiten würde
require(osmar) 
osmar_obj <- get_osm("anything", source = osmsource_file("my filename")) 

Innerhalb der Funktion get_osm ruft der Code ret <- xmlParse(raw) auf, der auslöst der Fehler nach ein paar Sekunden.

Die Frage
Wie ich eine große XML-Datei zu wissen, lesen, bin soll (hier 10 GB), dass ich 64G Speicher haben?

Vielen Dank!

+0

F oder diejenigen, die sich wundern, habe ich die Version von R überprüft und es ist ein ** 64bit ** eins. Ich habe auch das XML-Paket aktualisiert. – VeilleData

+0

Mehr Details! In der XmlParse-Funktion wird der Fehler in Zeile 12 ausgelöst: 'file = paste (raw, collapse =" \ n ")'. Nun, das ist genau das, was der Fehler gesagt hat. – VeilleData

+0

Bitte bearbeiten Sie Ihren Post mit voller Code-Block nicht ein paar Zeilen hier und da. – Parfait

Antwort

0

Dies ist die Lösung, die ich gefunden habe, obwohl es nicht 100% befriedigend ist.

  1. die .osm Datei Transform jedes Newline durch Entfernen (aber die letzte) in der Shell
  2. Führen Sie den exakt gleichen Code wie zuvor, die Paste Skipping, die nicht mehr benötigt wird (da Sie tat nur das Äquivalent in Shell)

Profit :)

Natürlich, ich bin nicht mit ihm sehr glücklich, weil in der Schale, die Datendatei zu modifizieren mehr ein Trick ist, dass eine tatsächliche Lösung :(