Schematyp mit Polars Scan/Sink erzwingen
Posted: 29 Dec 2024, 04:34
Ich habe eine große Anzahl von CSV-Dateien (~100.000), von denen einige selbst große CSV-Dateien sind (d. h. >128 GB), und ich versuche, sie in Parquet-Dateien zu konvertieren. Die Dateien enthalten eine Mischung aus Zeichen-, Zahlen- und Datumsdaten, die im CSV-Format gespeichert sind.
Ich habe aus zwei Gründen ein Problem beim Konvertieren: 1) wenn der Scan/Sink-Aufruf funktioniert Dateien sind etwa zehnmal so groß wie ihre CSV-Versionen; 2) Der Aufruf schlägt häufig fehl, weil das Vorhersageschema die Datentypen nicht ableiten kann.
Meine Frage lautet also: Wie kann ich den Scan/Sink-Aufruf dazu zwingen, nur Zeichendatentypen zu erstellen?
Mein Code lautet wie folgt:
Wenn dies ausgeführt wird und auf eine Spalte stößt, die ursprünglich wie ein Datentyp für einen Stapel aussieht, wird dieser Datentyp abgeleitet. Wenn der nächste Stapel jedoch etwas Inkonsistentes enthält, wird ein Fehler ausgegeben.
Angesichts der Dateigrößen kann ich nicht garantieren, dass jede Spalte immer denselben Datentyp hat. Daher möchte ich erzwingen, dass der Datentyp jeder Spalte ein Zeichen ist, und mich dann später mit problematischen Spalten befassen/zu numerischen/Datumstypen wechseln. Wie mache ich das?
Danke für jede Hilfe.
Grüße,
James
Ich habe aus zwei Gründen ein Problem beim Konvertieren: 1) wenn der Scan/Sink-Aufruf funktioniert Dateien sind etwa zehnmal so groß wie ihre CSV-Versionen; 2) Der Aufruf schlägt häufig fehl, weil das Vorhersageschema die Datentypen nicht ableiten kann.
Meine Frage lautet also: Wie kann ich den Scan/Sink-Aufruf dazu zwingen, nur Zeichendatentypen zu erstellen?
Mein Code lautet wie folgt:
Code: Select all
import os
import polars as pl
dir_list = os.listdir()
for filename in dir_list:
if ".txt" in filename: pl.scan_csv(filename,separator="|").sink_parquet(filename.replace(".txt",".parquet"),type_coercion=False,compression="zstd",compression_level=11)
Angesichts der Dateigrößen kann ich nicht garantieren, dass jede Spalte immer denselben Datentyp hat. Daher möchte ich erzwingen, dass der Datentyp jeder Spalte ein Zeichen ist, und mich dann später mit problematischen Spalten befassen/zu numerischen/Datumstypen wechseln. Wie mache ich das?
Danke für jede Hilfe.
Grüße,
James