Heim > Artikel > Backend-Entwicklung > Wie Python Vaex schnell 100G große Datenmengen analysieren kann
Heutzutage wird die Datenmenge, die von Data-Science-Wettbewerben bereitgestellt wird, immer größer und reicht von Dutzenden Gigabyte bis zu Hunderten von Gigabyte. Dies wird die Maschinenleistung auf die Probe stellen und Datenverarbeitungsfunktionen.
Pandas in Python ist ein häufig verwendetes Datenverarbeitungstool. Es kann größere Datensätze (zig Millionen Zeilen) verarbeiten, wenn das Datenvolumen jedoch Milliarden von Dutzenden von Milliarden Zeilen erreicht etwas schwierig zu verarbeiten. Es übersteigt meine Fähigkeiten, man kann sagen, dass es sehr langsam ist.
Es gibt Leistungsfaktoren wie den Computerspeicher, aber Pandas eigener Datenverarbeitungsmechanismus (der auf dem Speicher basiert) schränkt auch seine Fähigkeit ein, große Datenmengen zu verarbeiten.
Natürlich können Pandas Daten stapelweise über Blöcke lesen, aber der Nachteil besteht darin, dass die Datenverarbeitung komplexer ist und jeder Analyseschritt Speicher und Zeit verbraucht.
Als nächstes lesen Sie mit Pandas einen 3,7G-Datensatz (HDF5-Format) und berechnen Sie den Durchschnitt der ersten Zeile. Die CPU meines Computers ist i7-8550U und der Speicher ist 8G. Mal sehen, wie lange dieser Lade- und Berechnungsvorgang dauert.
Datensatz:
Verwenden Sie Pandas zum Lesen und Berechnen:
# 🎜🎜#
Bei Betrachtung des obigen Prozesses dauerte das Laden der Daten 15 Sekunden und die Berechnung des Durchschnitts 3,5 Sekunden, also insgesamt 18,5 Sekunden. Die hier verwendete HDF5-Datei ist ein Dateispeicherformat, das sich besser zum Speichern großer Datenmengen eignet, einen hohen Komprimierungsgrad aufweist und schneller zu lesen ist schreiben. Wechseln Sie zum heutigen Protagonisten Vaex, lesen Sie dieselben Daten und führen Sie dieselbe Durchschnittsberechnung durch. Wie lange wird es dauern? Verwenden Sie vaex zum Lesen und Berechnen: Das Lesen der Datei dauert 9 ms, was ignoriert werden kann Der Durchschnitt wird anhand von 1s berechnet, insgesamt 1s. Derselbe HDFS-Datensatz mit 100 Millionen Zeilen wird gelesen. Warum braucht Pandas mehr als zehn Sekunden, während Vaex fast 0 Sekunden benötigt? Das liegt vor allem daran, dass Pandas die Daten in den Speicher einliest und sie dann zur Verarbeitung und Berechnung verwendet. Vaex ordnet die Daten nur dem Speicher zu, anstatt sie tatsächlich in den Speicher einzulesen. Dies ist dasselbe wie das verzögerte Laden von Spark. Es wird geladen, wenn es verwendet wird, und nicht, wenn es deklariert wird. Egal wie groß die geladenen Daten sind, 10 GB, 100 GB ... für vaex ist dies sofort möglich. Der Wermutstropfen ist, dass das verzögerte Laden von vaex nur HDF5-, Apache Arrow-, Parquet-, FITS- und andere Dateien unterstützt, jedoch keine Textdateien wie CSV, da Textdateien nicht dem Speicher zugeordnet werden können. Einige Freunde verstehen die Speicherzuordnung möglicherweise nicht gut. Hier ist eine Erklärung. Sie müssen es selbst herausfinden: Die Speicherzuordnung bezieht sich auf den Speicherort von Dateien auf der Festplatte . Eine Eins-zu-Eins-Entsprechung mit einem Bereich gleicher Größe im logischen Adressraum des Prozesses. Diese Entsprechung ist ein rein logisches Konzept und existiert nicht physisch. Der Grund dafür ist, dass der logische Adressraum des Prozesses selbst nicht existiert. Bei der Speicherzuordnung erfolgt keine eigentliche Datenkopie. Die Datei wird nicht in den Speicher geladen, sondern logisch in den Speicher eingefügt. Dabei wird die entsprechende Datenstruktur (struct address_space) erstellt und initialisiert. Was ist VaexWir haben die Geschwindigkeit der Verarbeitung großer Datenmengen zwischen Vaex und Pandas verglichen, und Vaex hat offensichtliche Vorteile. Obwohl er über herausragende Fähigkeiten verfügt und nicht so bekannt ist wie Pandas, ist Vaex immer noch ein Neuling, der gerade erst aus der Branche hervorgegangen ist. vaex ist auch eine auf Python basierende Datenverarbeitungsbibliothek eines Drittanbieters, die mit installiert werden kann. pip
API: ähnlich wie Pandas, mit umfangreichen Datenverarbeitungs- und Berechnungsfunktionen;
Vaex installieren
vaex unterstützt das Lesen von HDF5-, CSV-, Parkett- und anderen Dateien mithilfe der Lesemethode. HDF5 kann träge gelesen werden, während CSV nur in den Speicher gelesen werden kann.
Manchmal müssen wir verschiedene Transformationen, Überprüfungen, Berechnungen usw. an den Daten durchführen. Jeder Schritt der Pandas-Verarbeitung verbraucht Speicher und ist zeitaufwändig. Sofern Sie keine Kettenverarbeitung verwenden, ist der Prozess sehr unklar.
vaex verwendet während des gesamten Prozesses keinen Speicher. Da seine Verarbeitung nur einen Ausdruck generiert, der eine logische Darstellung ist und nicht ausgeführt wird, wird er erst in der Phase der Endergebnisgenerierung ausgeführt. Darüber hinaus werden die Daten im gesamten Prozess gestreamt und es entsteht kein Speicherrückstand.
Sie können sehen, dass es zwei Prozesse zum Filtern und Berechnen gibt und hier kein Kopieren des Speichers erfolgt, was ein verzögerter Mechanismus ist. Wenn jeder Prozess tatsächlich berechnet wird, ganz zu schweigen vom Speicherverbrauch, ist allein der Zeitaufwand enorm.
Statistische Berechnungsfunktion von vaex:
vaex kann auch eine schnelle visuelle Anzeige durchführen, selbst bei zig Milliarden Datensätzen kann es immer noch Diagramme in Sekundenschnelle erstellen.
vaex-Visualisierungsfunktion:
vaex ähnelt in gewisser Weise einer Kombination aus Spark und Pandas. Je größer die Datenmenge, desto mehr können ihre Vorteile widergespiegelt werden. Solange Ihre Festplatte so viele Daten speichern kann, wie sie benötigt, kann sie die Daten schnell analysieren.
vaex entwickelt sich immer noch rasant und integriert immer mehr Pandas-Funktionen. Die Anzahl der Sterne auf Github beträgt 5.000 und das Wachstumspotenzial ist riesig.
Anhang: HDF5-Datensatz-Generierungscode (4 Spalten und 100 Millionen Datenzeilen)
import pandas as pd import vaex df = pd.DataFrame(np.random.rand(100000000,4),columns=['col_1','col_2','col_3','col_4']) df.to_csv('example.csv',index=False) vaex.read('example.csv',convert='example1.hdf5')
Bitte beachten Sie, dass Sie hier nicht Pandas verwenden, um HDF5 direkt zu generieren, da sein Format nicht mit Vaex kompatibel ist.
Das obige ist der detaillierte Inhalt vonWie Python Vaex schnell 100G große Datenmengen analysieren kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!