Rasterdaten einlesen mit package raster und terra

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
T3stversion
Beiträge: 6
Registriert: So Jan 03, 2021 8:36 pm

Rasterdaten einlesen mit package raster und terra

Beitrag von T3stversion »

Liebe Community,

ich möchte Rasterdateien (.asc) in R einlesen. Dazu verwende ich das die librarys "raster" und "terra". Das funktioniert auch ganz hervorragend, wenn die Daten lokal gespeichert sind. Wenn sie allerdings auf einem Netzlaufwerk liegen, dann ist die Lesezeit der Raster um ein Vielfaches höher. Folgendes Beispiel:

Code: Alles auswählen

library(raster)
setwd(..pfad..)
a<-list.files()
a1<-Sys.time()
for (i in 1:24){
	q1<-raster(a[i])
}
a2<-Sys.time()
a2-a1
Liegen die Daten lokal, dauert das Lesen der 24 Raster 0,35 Sekunden. Liegen sie auf dem Netzlaufwerk, mehr als 300 mal so lange. Ich habe verschiedene Systeme (Ubuntu und Windows, lokal und NAS, .ascii-Dateien und netcdf-Dateien) getestet. Einmal mit der terra und einmal mit der raster-Bibliothek. Die Lesedauern in Sekunden sind in der folgenden Tabelle zu sehen. Rote Werte sind die langsamen Lesezeiten, grün sind Werte die im erwarteten Bereich liegen.

Am Netzwerk liegt es meiner Meinung nicht, da im Windows mit dem "raster"-package die Daten wie erwartet schnell gelesen werden können. Am Ubuntu liegt es meiner Meinung nach auch nicht, da die netcdf-Daten ebenfalls wie erwartet schnell gelesen werden können. Am Package kann es eigentlich auch nicht liegen, da die lokalen Daten jeweils wie erwartet schnell gelesen werden können.

Wie ihr seht, bin ich etwas hilflos, würde dem Fehler gern auf die Spur kommen aber weiß nicht wo ich ansetzen kann.

Danke für die Hilfe und beste Grüße!
Dateianhänge
Geschwindigkeitsbenchmark.png
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Rasterdaten einlesen mit package raster und terra

Beitrag von student »

Hallo,

ich kann Dir nicht weiterhelfen, da ich bei beiden Paketen nicht weiß, was "unter der Motorhaube" passiert. Wie Du, weiß ich aber, dass es einen enormen Unterschied macht, ob ich etwas lokal von einer HD, SSD oder M2 SSD einlese oder über ein Netzwerk. Gerade über ein Netzwerk hängt es von vielen Parametern ab. Windows und Ubuntu bieten Möglichkeiten, wenigstens ein wenig, Netzwerkaktivitäten zu prüfen. So kannst Du wenigstens die Übertragungsrate einsehen und ob die Übertragung zwischendurch mal pausiert.

Viel Glück!
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Rasterdaten einlesen mit package raster und terra

Beitrag von Athomas »

Deine Motivation ist mir etwas unklar – warum lädst Du den ganzen Klumpatsch nicht herunter, wenn es damit erheblich schneller geht? Oder zumindest (temporär) jede der 24 Einzeldateien?

Ich halte es für denkbar, dass die einzulesenden Daten erstmal „untersucht“ werden, und diese Analyse über die lange Leitung halt wesentlich zeitintensiver ist!?
T3stversion
Beiträge: 6
Registriert: So Jan 03, 2021 8:36 pm

Re: Rasterdaten einlesen mit package raster und terra

Beitrag von T3stversion »

Hallo Athomas,

zur Motivation: Die Daten liegen auf der NAS, damit ich und andere von verschiedenen Rechnern drauf zugreifen können. Dort liegen einige 100.000 Rasterdaten mit einigen Terrabyte Größe. Die auf jeden Rechner runterzuladen und somit mehrfach und asynchron vorzuhalten ergibt keinen Sinn, deswegen ja das Netzlaufwerk.
Tatsächlich ist es sogar schneller, die Daten erst von der NAS auf die lokale SSD zu kopieren und dann lokal einzulesen. (~25 Sekunden für die 24 Raster vs. 116 Sekunden direkt von der NAS lesen). Durch den Test mit dem Windows Rechner weiß ich aber, dass es möglich ist, die Aufgabe in ~2 Sekunden zu erledigen. Der Windows-Rechner greift über WLAN5 drauf zu (ca. 600Mbit/s), der Ubuntu-Rechner über 1 Gbit Ethernet. Eigentlich sollte also der Ubuntu-Rechner etwas schneller sein.

Das Einlesen der 24 Raster soll auch nur das Problem verdeutlichen. Die eigentliche Aufgabe umfasst das Einlesen von ca. 200.000 Rastern. Da spielt es eine entscheidende Rolle, ob das in einigen Stunden oder einigen Monaten erledigt ist.

Die Frage ist, warum dauert das so sehr viel länger, welcher Prozess ist dafür verantwortlich? Wenn das identifiziert ist lässt sich der Flaschenhals eventuell entfernen.
Ich habe mit "xrprof" die Aktivität der R-Session geloggt um zu sehen, welcher Prozess so lange dauert. Tatsächlich sagt "xrprof", dass das Lesen eines einzelnen Rasters von der NAS nur ~0.07 Sekunden dauert. Das ist der Wert den ich auch erwarten würde (~1,7 Sekunden für die 24 Raster). Für die restlichen ~5 Sekunden (die R tatsächlich für das Einlesen für ein einzelnes Raster von der NAS braucht) gibt es keine Daten in der log-Datei.

Ich hoffe dass die Motivation deutlich geworden ist, kann das bei Rückfragen aber gern weiter ausführen :)
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Rasterdaten einlesen mit package raster und terra

Beitrag von Athomas »

Die auf jeden Rechner runterzuladen und somit mehrfach und asynchron vorzuhalten ergibt keinen Sinn, deswegen ja das Netzlaufwerk.
Und was ist mit dem Vorschlag, immer ein "Arbeitsraster" herunterzuladen und das vom lokalen Medium einzulesen?
T3stversion
Beiträge: 6
Registriert: So Jan 03, 2021 8:36 pm

Re: Rasterdaten einlesen mit package raster und terra

Beitrag von T3stversion »

Athomas hat geschrieben: Mo Jul 18, 2022 10:34 am Und was ist mit dem Vorschlag, immer ein "Arbeitsraster" herunterzuladen und das vom lokalen Medium einzulesen?
Das wäre ein workaround, der die Einlesedauer pro Raster auf etwas über eine Sekunde reduzieren würde (von etwas unter 5 Sekunden). Das ist aber immer noch mehr als 10 Mal so viel wie durch das direkte Einlesen von der NAS möglich sein müsste (~0,07 Sekunden)

Oder nochmal für alle 200.000 Raster:
~11 Tage: einlesen von der NAS
~2,5 Tage: lokal kopieren, dann einlesen
~4 Stunden: einlesen von der NAS, wenn es diesen unbekannten Fehler nicht gäbe.
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Rasterdaten einlesen mit package raster und terra

Beitrag von student »

Ich bin mir nicht sicher, ob das ein Fehler ist oder ob es am designe der Funktion raster oder der Anwendung der Funktion liegt. Wenn ich die Beschreibung zu raster lese ...
Methods to create a RasterLayer object. RasterLayer objects can be created from scratch, a file,
an Extent object, a matrix, an ’image’ object, or from a Raster*, Spatial*, im (spatstat) asc, kasc
(adehabitat*), grf (geoR) or kde object.
... dann vermute ich, dass die Funktion während des Einlesens eine ganze Menge macht und entsprechend parametrisiert werden kann/muss.

Vielleicht habe ich es überlesen, Deine Lese-Analyse beruht auf Ausführungen mittels raster oder via ftp?
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Antworten