Parallele Verarbeitung großer Raster in R (Windows)

8

Ich verwende das doSNOW-Paket und insbesondere die parLapply-Funktion, um eine Neuklassifizierung (und anschließend andere Operationen) in einer Liste großer Raster-Datasets (Betriebssystem: Windows x64) durchzuführen.

Der Code sieht ein wenig wie dieses minimalistische Beispiel aus:

%Vor%

Der Code funktioniert tatsächlich wie vorgesehen. Das Problem tritt auf, wenn ich mit den Ergebnissen fortfahren möchte. Ich erhalte diese Fehlermeldung:

%Vor%

Soweit ich verstanden habe, werden die Raster in einer temporären Datei auf der Festplatte gespeichert, da die Raster ziemlich groß sind. Und wenn ich den Schnee-Cluster schließe, können diese Dateien nicht mehr zugegriffen werden.

Meine Frage ist also, wie kann ich auf die Daten zugreifen, wenn der Cluster geschlossen ist? Kann ich mit dieser Methode fortfahren?

Danke!

    
Val 29.02.2016, 12:56
quelle

2 Antworten

1

Ich hatte genau dieses Problem, als ich die Rasterisierungsfunktion in einem Cluster in R aktivierte.

Alle Tests funktionierten perfekt, aber wenn ich zu sehr großen und fein auflösenden Rastern hochskalierte, bekam ich wiederholt Fehler in Bezug auf temporäre Dateien, die ich nicht einmal auf meinem Computer finden konnte. Das Listenobjekt, das ich zusammenführen und als 1 Raster schreiben wollte, war in R, aber ich konnte damit nichts anfangen.

Nachdem ich das temporäre Dateiverzeichnis gesehen habe, während der Cluster lief, bemerkte ich, dass das Schließen des Clusters automatisch alle erstellten temporären Dateien löschte. Daher musste ich die merge und writeRaster Funktionen innerhalb des Clusters durchführen, sonst würde es sehr scheitern ähnlicher Fehler zu Ihrem.

    
Sam 23.01.2017, 09:25
quelle
3

Sie könnten bestimmte Dateinamen an calc (oder z. B. reclassify ) übergeben und Ihre Funktion diese Dateinamen als Vektor zurückgeben, der in einen Stapel eingelesen werden soll:

%Vor%

Aber sieh dir auch ?clusterR an - ich vermute, dass es mit reclassify funktioniert. Aus der Dokumentation:

  

Diese Funktion funktioniert nur mit Funktionen, die ein Raster * -Objekt als erstes Argument haben und die Zelle für Zelle arbeiten (dh es gibt keine Wirkung von benachbarten Zellen) und ein Objekt mit der gleichen Anzahl von Zellen zurückgibt wie das Eingabe-Rasterobjekt Das erste Argument der aufgerufenen Funktion muss ein Raster * -Objekt sein. Es kann nur ein Raster * -Objektargument geben. Zum Beispiel funktioniert es mit calc und es funktioniert auch mit Overlay, solange Sie ein einzelnes RasterStack oder RasterBrick als erstes Argument angeben.

    
jbaums 01.03.2016 16:38
quelle