Verfasst am: 17.04.2018, 19:52
Titel: Big Data Lösung für Cells mit Untercell und Structures
Hey,
eine weitere Frage zum handling großer Variablen mit unterschiedlichen Datentypen.
Also genau mein Problem ist, ich habe durch verschieden kleine Programme mir eine Sammlung an Daten generiert, was schön ist, alles an einem Fleck zu haben.
Diese Daten sind inzwischen wie folgt aufgebaut.
Zelle a hat 10 Zeilen und 5 Spalten. (5 Messungen)
In Spalte 1 ist eine weitere Zelle mit mehreren hundert Zeilen und 7 Spalten.
In einer jeder dieser Zeilen befindet sich wiederum in Spalte 1 eine Structure mit unterschiedlichen Eigenschaften einer Messung in einer Unterstruktur davon befinden sich die Datenpunkte, welche bis zu über (mehrere aber sagen wir)1 Mio. Messpunkte darstellen können. Auf diese Messpunkte werden verschiedene Verfahren angewendet.
Bevor fragen kommen zum umschreiben in eine übergeordnete Ebene etc.. das bringt nicht mal was, macht eher die Performance schlechter und kann sogar dazu führen das ein Fehler auftaucht,da die Dummy Variable sich zu schnell und oft ändert und das wiederum wahrscheinlich mit der Speicherverwaltung von Java kollidiert.
Also Hauptproblem ist, dass bis zur Messung 4 gerechnet wird, aber irgendwo in Messung 5 Matlab völlig einrfriert.
Mit load und save und clearvars clear all etc. wurde scho eig alles versucht, auch eval habe ich in letzter Zeit bemüht auch zum getrennten abspeichern, aber alles Misserfolge.
Über save sah man im Explorer, dass die Variable A über 7GB groß ist, also zu groß um damit gut zu arbeiten in einem 8GB RAM PC.
Über die Umwandlung in eine Tabelle mit cell2table vor dem Abspeichern wurde sie zwar einiges kleiner, aber nicht viel besser.
Ansonsten versuchte ich auch ein die Methode über ein matfile object, was aber an der Arbeitsspeicherauslastung fast nichts ändert und die Ladezeiten eines kleinen Teils enorm sind, kam nicht einmal dazu die Variable im matfile upzudaten.
Ich hoffe ich habe mein Problem einigermaßen verständlich beschrieben.
Die Cell wurde natürlich auch missbraucht um den Workspace aufzuräumen, es wurde aber schon alles mögliche gelöscht, was nicht gebraucht wird.
Ich bin auch hier um jede Hilfe dankbar.
Hierbei bin ich ziemlich am verzweifeln, da meine Daten je nach User mehr werden können, das ist ja "nur" eine Beispielrechnung.
Viele Grüße,
matlab#?!+%$!
PS: Habe vor kurzem etwas von Data Streaming gehört, weiß jemand additional ob das in Matlab irgendwie realisierbar wäre? am schönsten wäre wenn MATLAB die Variable nicht in den RAM lädt sondern stets auf der Festplatte behält, Indizierbar bleibt und dennoch einen gute Zugriffszeit besitzt.
grundsätzlich wären Tall Arrays eine Option. Dabei geht es dann aber um eine Tabelle oder ein Array, keine verschachtelte Struktur. Hilfreich wäre, wenn du Code zeigen kannst, der eine solche Datenstruktur erstellt (z.B. mit rand statt tatsächlichen Daten) und was du dann genau damit machen willst.
ich habe hier ein wenig die Datenstruktur nachgebastelt.
Was ich effektiv will, wäre zumindest eine Möglichkeit, dass ich die 'messungen' abspeichere aber dennoch laden kann wie wenn ich sie im Workspace indiziere.
for ijk=1:1000
unter_ebene_messungen{ijk,1}=processable_data;
unter_ebene_messungen{ijk,2}='data';
unter_ebene_messungen{ijk,3}=ijk;
unter_ebene_messungen{ijk,4}='other data';
unter_ebene_messungen{ijk,5}=ijk^2;
end
for ijk=1:10
messungen{ijk,1}='structure über die mit dem Namen des Parameters die Values auslesbar sind';
messungen{ijk,2}=['messung_name',num2str(ijk)];
messungen{ijk,3}=unter_ebene_messungen; %normal
messungen{ijk,4}=unter_ebene_messungen; %besonders bearbeitet
messungen{ijk,5}=unter_ebene_messungen; %anders bearbeitet
messungen{ijk,6}='eigentlich steht hier eine Zelle mit der Liste der Einheiten';
end
schwer zu sagen wo es da genau hakt.
An sich sollte matfile die beste Lösung sein. Da aber genau darauf achten, was laut Doku partielles Laden unterstützt und was nicht.
der Ansatz mit matfile ist leider bei mir kollabiert mit java heap Fehlermeldungen im Anschluss oder ein schlichtes einfrieren und abstürzen von Matlab.
Habe das vorübergehend über sehr viele eval Befehle gelöst und wegspeichern in kleine Puzzleteile und wieder laden.
Die Performance ist natürlich grausig aber ich habe hier im Forum mal gelesen.. lieber langsam als gar nicht...
Ich lasse die Frage dennoch offen, vielleicht ergibt sich noch etwas, da Matlab ja auch mit "Big Data" Lösungen wirbt.
die Größe des Java Heap kannst du in den Preferences unter MATLAB --> General --> Java Heap Memory anpassen.
eval ist sehr oft unnötig, weil meist genau das gleiche auch ohne eval erreicht werden kann. Wenn nicht genau das gleiche, dann etwas funktionell äquivalentes.
Freilich, lieber langsam als gar nicht... aber man möchte dann vielleicht doch nicht Stunden oder Tage warten, wenn es nicht unbedingt nötig ist.
Hast du reproduzierbare Beispiele für die Probleme mit matfile?
Eine Option kann auch sein, dich mit der Problematik mal direkt an MathWorks, z.B. den Technischen Support, zu wenden.
Ich lasse die Frage dennoch offen, vielleicht ergibt sich noch etwas, da Matlab ja auch mit "Big Data" Lösungen wirbt
"Hope is not a strategy"
Ob Hochschule oder Unternehmen, einfach mal MathWorks kontaktieren, so wie Harald schon angemerkt hat.
Andreas
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.