PySpark: DataFrame oder Spalte in Python-Liste umwandeln (Einsteigerfreundlicher Guide)
Updated on
Bei der Arbeit mit PySpark muss man häufig verteilte Spark DataFrames in native Python-Objekte umwandeln.
Ein häufiges Bedürfnis – besonders beim Debuggen, Exportieren oder bei Transformationen – ist es, ein PySpark DataFrame in eine Python-Liste zu konvertieren.
Auch wenn PySpark keine eingebaute .tolist()-Methode wie Pandas bietet, gibt es mehrere zuverlässige Wege, dasselbe Ergebnis zu erreichen – je nach Datensatzgröße und Speicherbeschränkungen.
Dieser aktualisierte Guide behandelt:
- Was „tolist“ in PySpark bedeutet
- Die besten Techniken, um Spark DataFrames → Python-Listen zu konvertieren
- Umgang mit einzelnen und mehreren Spalten
- Performance-Aspekte
- Codebeispiele für kleine und große Datensätze
Suchst du einen AI-Agenten, der deine PySpark-, Pandas- und Jupyter-Workflows wirklich versteht?
RunCell ist ein JupyterLab AI-Agent, der deinen Code lesen, DataFrames analysieren, Notebook-Kontext verstehen, Fehler debuggen und sogar Code für dich generieren & ausführen kann.
Er läuft direkt in JupyterLab – kein Fensterwechsel, kein Copy & Paste.
👉 Probiere RunCell aus: https://www.runcell.dev (opens in a new tab)
Was bedeutet "tolist()" in PySpark?
Im Gegensatz zu Pandas haben PySpark DataFrames keine native .tolist()-Methode.
Wenn PySpark-Anwender von „tolist“ sprechen, meinen sie typischerweise:
✔ Option A — Das gesamte DataFrame in eine Python-Liste umwandeln
df.collect()✔ Option B — DataFrame in Pandas umwandeln und dann in eine Liste
df.toPandas().values.tolist()✔ Option C — Eine einzelne Spalte in eine Python-Liste umwandeln
df.select("col").rdd.flatMap(lambda x: x).collect()Dieser Guide führt dich Schritt für Schritt durch alle diese Methoden mit klaren Beispielen.
Methode 1: PySpark DataFrame in eine Python-Liste konvertieren (kleine Daten)
Das ist das gängigste Muster, sollte aber nur verwendet werden, wenn der Datensatz in den Speicher passt.
df.toPandas().values.tolist()Beispiel
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("PySparkTutorial").getOrCreate()
data = [('Alice', 1), ('Bob', 2), ('Charlie', 3), ('David', 4)]
df = spark.createDataFrame(data, ['Name', 'Age'])
df.toPandas().values.tolist()Ausgabe
[['Alice', 1], ['Bob', 2], ['Charlie', 3], ['David', 4]]Methode 2: Spark DataFrame ohne Pandas in Liste umwandeln (empfohlen für große Daten)
Wenn dein Datensatz groß ist, solltest du toPandas() unbedingt vermeiden.
Nutze stattdessen die verteilte API von Spark:
df.collect()Das liefert:
[Row(Name='Alice', Age=1), Row(Name='Bob', Age=2), ...]Um die Zeilen in „plain“ Python-Listen umzuwandeln:
[x.asDict().values() for x in df.collect()]Oder jede Zeile in ein Dict konvertieren:
[row.asDict() for row in df.collect()]Methode 3: Eine einzelne Spalte in eine Python-Liste umwandeln
Ein sehr häufiger Anwendungsfall.
Option A: Mit RDD (schnell & skalierbar)
df.select("Name").rdd.flatMap(lambda x: x).collect()Option B: Mit Pandas (kleine Daten)
df.toPandas()["Name"].tolist()Methode 4: DataFrame mit Index in eine Python-Liste umwandeln
PySpark DataFrames haben keinen eingebauten Index, aber du kannst einen manuell hinzufügen:
from pyspark.sql.functions import row_number
from pyspark.sql.window import Window
df_index = df.withColumn(
"index", row_number().over(Window.orderBy("Name"))
)
df_index.show()In eine Liste von Dictionaries umwandeln:
df_index.toPandas().to_dict("records")Ausgabe
[
{'Name': 'Alice', 'Age': 1, 'index': 1},
{'Name': 'Bob', 'Age': 2, 'index': 2},
{'Name': 'Charlie', 'Age': 3, 'index': 3},
{'Name': 'David', 'Age': 4, 'index': 4}
]Performance-Hinweise (unbedingt lesen)
🚫 Vermeide df.toPandas(), wenn:
- der Datensatz groß ist
- der Speicher im Cluster begrenzt ist
- Spalten große Binary-/Textobjekte enthalten
✔ Nutze collect() oder RDD-Operationen, wenn:
- du mit mittelgroßen bis großen Daten arbeitest
- du nur bestimmte Spalten benötigst
- du Speicherüberlastung auf dem Driver vermeiden willst
✔ Wandle nur um, was du wirklich brauchst
Anstatt:
df.toPandas()lieber:
df.select("col_of_interest")Fazit
PySpark bietet keine native .tolist()-Funktion, aber die Umwandlung eines DataFrames in eine Python-Liste ist sehr einfach mit:
toPandas().values.tolist()– für kleine Datensätzecollect()oderrdd-Operationen – für skalierbare Workloadsto_dict("records")– für JSON-freundliche Ausgaben
Wähle die Methode, die am besten zu deiner Datengröße und deinem Workflow passt.
Referenzen
- https://sparkbyexamples.com/pyspark/pyspark-tolist-function/ (opens in a new tab)
- https://www.mygreatlearning.com/blog/pyspark-how-to-convert-a-dataframe-tolist/ (opens in a new tab)
- https://sparkbyexamples.com/pyspark/pyspark-dataframe-to-pandas-dataframe/ (opens in a new tab)
Häufig gestellte Fragen
1. Wie wandle ich ein PySpark DataFrame in eine Python-Liste um?
Nutze df.collect() oder df.toPandas().values.tolist(), je nach Datensatzgröße.
2. Wie wandle ich eine einzelne Spalte in eine Liste um?
df.select("col").rdd.flatMap(lambda x: x).collect()3. Wie wandle ich eine Spark-Row in ein Dict um?
row.asDict()