Beide bieten eine breite Palette an Tools und Vorteilen, die uns irgendwann zweifeln lassen können, welches der beiden wir wählen sollen. Es geht nicht darum, alle Prozesse des Unternehmens so zu ändern, dass Polars zum Einsatz kommen, oder um den „Tod“ von Pandas (dies wird in naher Zukunft nicht passieren). Es geht darum, andere Tools zu kennen, die uns helfen können, Kosten und Zeit in Prozessen zu reduzieren und die gleichen oder bessere Ergebnisse zu erzielen.
Wenn wir Cloud-Dienste nutzen, priorisieren wir bestimmte Faktoren, einschließlich ihrer Kosten. Die Dienste, die ich für diesen Prozess verwende, sind AWS Lambda mit der Python 3.10-Laufzeit und S3 zum Speichern der Rohdatei und der Parquet-konvertierten Datei.
Die Absicht besteht darin, eine CSV-Datei als Rohdaten zu erhalten und sie mit Pandas und Polar zu verarbeiten, um zu überprüfen, welche dieser beiden Bibliotheken uns eine bessere Optimierung von Ressourcen wie Speicher und Gewicht der resultierenden Datei bietet.
Pandas
Es handelt sich um eine Python-Bibliothek, die auf Datenmanipulation und -analyse spezialisiert ist. Sie ist in C geschrieben und wurde erstmals 2008 veröffentlicht.
*Polare *
Es handelt sich um eine auf Datenmanipulation und -analyse spezialisierte Python- und Rust-Bibliothek, die parallele Prozesse ermöglicht, größtenteils in Rust geschrieben ist und 2022 veröffentlicht wurde.
Die Architektur des Prozesses:
Das Projekt ist einigermaßen einfach, wie in der Architektur gezeigt: Der Benutzer hinterlegt eine CSV-Datei in work/pandas oder work/porlas und startet automatisch den s3-Trigger, um die Datei zu verarbeiten, sie in Parkett umzuwandeln und sie in „processed“ abzulegen.
Verwenden Sie in diesem kleinen Projekt zwei Lambdas mit der folgenden Konfiguration:
Speicher: 2 GB
Kurzlebiger Speicher: 2 GB
Lebensdauer: 600 Sekunden
Anforderungen
Lambda mit Pandas: Pandas, Numpy und Pyarrow
Lambda mit Polaren: Polaren
Der für den Vergleich verwendete Datensatz ist auf kaggle unter dem Namen „Rotten Tomatoes Movie Reviews – 1.44M rows“ verfügbar oder kann hier heruntergeladen werden.
Das vollständige Repository ist auf GitHub verfügbar und kann hier geklont werden.
Größe oder Gewicht
Das von Pandas verwendete Lambda erfordert zwei weitere Plugins zum Erstellen einer Parquet-Datei, in diesem Fall PyArrow und eine bestimmte Version von Numpy für die Version von Pandas, die ich verwendet habe. Als Ergebnis haben wir ein Lambda mit einem Gewicht oder einer Größe von 74,4 MB erhalten, was sehr nahe an der Grenze liegt, die AWS uns für das Gewicht des Lambda zulässt.
Das Lambda mit Polars erfordert kein weiteres Plugin wie PyArrow, was das Leben einfacher macht und die Größe des Lambda auf weniger als die Hälfte reduziert. Infolgedessen hat unser Lambda im Vergleich zum ersten ein Gewicht oder eine Größe von 30,6 MB, was uns Raum gibt, andere Abhängigkeiten zu installieren, die wir möglicherweise für unseren Transformationsprozess benötigen.
Leistung
Das Lambda mit Pandas wurde nach der ersten Version für die Verwendung von Komprimierung optimiert, allerdings wurde auch sein Verhalten analysiert.
Pandas
Die Verarbeitung des Datensatzes dauerte 18 Sekunden und es wurden 1894 MB Speicher für die Verarbeitung der CSV-Datei und die Generierung einer Parquet-Datei benötigt. Im Vergleich zu den anderen Versionen verbrauchte diese Version am meisten Zeit und Ressourcen.
Pandas-Komprimierung
Durch das Hinzufügen einer Codezeile konnten wir uns im Vergleich zur Vorgängerversion (Pandas) ein wenig verbessern. Die Verarbeitung des Datensatzes dauerte 17 Sekunden und verbrauchte 1837 MB, was keine wesentliche Verbesserung der Verarbeitungs- und Rechenzeit, sondern der Größe darstellt. der resultierenden Datei.
Polare
Die Verarbeitung desselben Datensatzes dauerte 12 Sekunden und ich habe nur 1462 MB verbraucht. Im Vergleich zu den beiden vorherigen bedeutet das eine Zeitersparnis von 44,44 % und einen geringeren Speicherverbrauch.
Ausgabedateigröße
Pandas
Das Lambda, in dem kein Komprimierungsprozess eingerichtet wurde, erzeugte eine Parquet-Datei von 177,4 MB.
Pandas-Komprimierung
Beim Konfigurieren der Komprimierung im Lambda erzeuge ich keine 121,1 MB große Parkettdatei. Eine kleine Zeile oder Option hat uns geholfen, die Dateigröße um 31,74 % zu reduzieren. Wenn man bedenkt, dass es sich nicht um eine wesentliche Codeänderung handelt, ist es eine sehr gute Option.
Polare
Polars hat eine 105,8 MB große Datei generiert, die beim Kauf mit der ersten Version von Pandas eine Einsparung von 40,36 % bzw. 12,63 % gegenüber der Pandas-Version mit Komprimierung darstellt.
Abschluss
Es ist nicht notwendig, alle internen Prozesse, die Pandas verwenden, so zu ändern, dass sie jetzt Polars verwenden. Es ist jedoch wichtig zu bedenken, dass uns die Verwendung von Polars nicht nur bei der Bereitstellung hilft, wenn wir über Tausende oder Millionen von Lambda-Ausführungen sprechen Zeit, wird uns aber auch dabei helfen, niedrigere Kosten zu erzielen, da AWS für serverlose Dienste wie Lambda eine zeitbasierte Abrechnung vornimmt.
Wenn wir diese 40,36 % in Millionen von Dateien umrechnen, sprechen wir ebenfalls von GB oder TB, was erhebliche Auswirkungen innerhalb eines Datalake- oder Dataware-Hauses oder sogar in einem Cold-File-Storage hätte.
Die Reduzierung mit Polars wäre nicht nur auf diese beiden Faktoren beschränkt, da sie die Ausgabe von Daten und/oder Objekten von AWS stark beeinträchtigen würde, da es sich um einen kostenpflichtigen Service handelt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3