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 den Prozessen zu reduzieren und die gleichen oder bessere Ergebnisse zu erzielen.
Wenn wir Cloud-Dienste nutzen, priorisieren wir bestimmte Faktoren, einschließlich deren 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 Polars 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. Sie ist größtenteils in Rust geschrieben und wurde 2022 veröffentlicht.
Die Architektur des Prozesses:
Das Projekt ist etwas Einfaches, wie in der Architektur gezeigt: Der Benutzer legt eine CSV-Datei in work/pandas oder work/porlas ab und startet automatisch den s3-Trigger, um die Datei zu verarbeiten, sie in Parkett umzuwandeln und in „processed“ abzulegen.
In diesem kleinen Projekt habe ich zwei Lambdas mit der folgenden Konfiguration verwendet:
Speicher: 2 GB
Vergänglicher 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, um eine Parquet-Datei zu erstellen. In diesem Fall handelt es sich um 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 uns AWS für das Gewicht des Lambda zulässt.
Das Lambda mit Polars erfordert kein weiteres Plugin wie PyArrow, was das Leben vereinfacht 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 war dies die Version, die am meisten Zeit und Ressourcen verbrauchte.
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 hat 12 Sekunden gedauert und ich habe nur 1462 MB verbraucht, im Vergleich zu den beiden vorherigen bedeutet das eine Zeitersparnis von 44,44 % und einen geringeren Speicherverbrauch.
Größe der Ausgabedatei
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.
Fazit
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, geringere 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, etwas, das innerhalb eines Datalake- oder Dataware-Hauses oder sogar in einem Cold-File-Storage erhebliche Auswirkungen hätte.
Die Reduzierung mit Polars wäre nicht nur auf diese beiden Faktoren beschränkt, da sie sich stark auf die Ausgabe von Daten und/oder Objekten von AWS auswirken würde, da es sich um einen kostenpflichtigen Dienst handelt.
Das obige ist der detaillierte Inhalt vonWas ist schneller und günstiger, um Dateien in AWS zu konvertieren: Polar oder Pandas?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!