Stream sie. Öffne die Datei und iterier Zeile für Zeile, oder nutz csv.reader über das File-Objekt, sodass immer nur eine Zeile im Speicher liegt, und schieb jeden Datensatz durch Generator-Stufen statt Zwischenlisten zu bauen. Schreib gebündelt in Chunks von ein paar tausend. Ist die Arbeit CPU-lastig, teil sie nach Byte-Bereichen über Prozesse auf.
Warum Interviewer das fragen
Das prüft, ob Streaming dein Instinkt ist oder ein nachträglicher Einfall. Interviewer sehen genug Kandidaten, die reflexhaft zu pandas read_csv greifen und dann feststellen, dass der Container gekillt wird. Sie wollen außerdem operatives Denken hören: Wiederanlauffähigkeit, Fortschrittsverfolgung, gebündelte Writes und das Wissen, wann die richtige Antwort ist, kein Python mehr zu schreiben und die Datei in die Datenbank zu laden.
So baust du deine Antwort auf
- Entscheide dich fürs Streamen statt fürs Laden.
- Beschreib die Generator-Pipeline und gebündelte Writes.
- Ergänze Wiederanlauf und Fortschrittsmeldung.
- Sag, wann du es an ein anderes Werkzeug abgibst.
Beispielantwort
Nichts wird komplett geladen. Ein File-Objekt ist bereits ein Iterator über Zeilen, also lese ich zeilenweise mit csv.reader und verkette Generator-Stufen fürs Parsen, Filtern und Transformieren, was den Peak-Speicher unabhängig von der Dateigröße bei etwa einem Datensatz hält. Writes werden gebündelt, typischerweise ein paar tausend Zeilen pro Insert, weil Round Trips pro Zeile zu Postgres alles andere dominieren. Da vierzig Gigabyte eine Weile dauern, mache ich es wiederanlauffähig: Byte-Offset oder letzten verarbeiteten Key in einer kleinen State-Datei mitschreiben, alle hunderttausend Zeilen Fortschritt loggen und den Write mit einem Upsert idempotent machen, damit ein erneuter Lauf nichts duplizieren kann. Stellt sich das Parsen statt I/O als Flaschenhals heraus, teile ich die Datei nach Byte-Offsets auf und gebe Bereiche an einen Process-Pool, wobei ich auf Zeilengrenzen ausrichte. Ehrlich gesagt ist mein erster Vorschlag aber oft, Python für den Load ganz zu überspringen und die Bulk-Copy der Datenbank zu nutzen und die Transformation dann in SQL zu machen, weil das meist eine Größenordnung schneller ist.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wie gehst du mit fehlerhaften Zeilen mitten im Stream um?
- Würden polars oder duckdb deine Antwort ändern?
- Wie würdest du den Prozess exakt einmal wiederaufsetzbar machen?
Weitere Fragen für Python-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen