PySpark : Convertir un DataFrame ou une colonne en liste Python (guide pour débutants)
Updated on
Travailler avec PySpark implique souvent de convertir des Spark DataFrames distribués en objets Python natifs.
Un besoin très courant — en particulier pour le débogage, l’export ou certaines transformations — est de convertir un DataFrame PySpark en liste Python.
Même si PySpark ne fournit pas de méthode intégrée .tolist() comme Pandas, il existe plusieurs façons fiables d’obtenir le même résultat, selon la taille du jeu de données et les contraintes mémoire.
Ce guide mis à jour couvre :
- Ce que signifie “tolist” dans PySpark
- Les meilleures techniques pour convertir des Spark DataFrames → listes Python
- La gestion d’une ou plusieurs colonnes
- Les considérations de performance
- Des exemples de code pour petits et grands jeux de données
Vous voulez un agent IA qui comprend vraiment vos workflows PySpark, Pandas et Jupyter ?
RunCell est un agent IA pour JupyterLab qui peut lire votre code, analyser des DataFrames, comprendre le contexte du notebook, déboguer des erreurs, et même générer & exécuter du code pour vous.
Il fonctionne directement dans JupyterLab — pas besoin de changer de fenêtre ou de copier-coller.
👉 Essayez RunCell : https://www.runcell.dev (opens in a new tab)
Que signifie « tolist() » dans PySpark ?
Contrairement à Pandas, les DataFrames PySpark n’ont pas de méthode native .tolist().
Quand les utilisateurs PySpark parlent de “tolist”, ils veulent généralement dire :
✔ Option A — Convertir l’ensemble du DataFrame en liste Python
df.collect()✔ Option B — Convertir un DataFrame en Pandas, puis en liste
df.toPandas().values.tolist()✔ Option C — Convertir une seule colonne en liste Python
df.select("col").rdd.flatMap(lambda x: x).collect()Ce guide passe en revue toutes ces méthodes avec des exemples clairs.
Méthode 1 : Convertir un DataFrame PySpark en liste Python (petits jeux de données)
C’est le schéma le plus courant, mais à utiliser uniquement si le jeu de données tient en mémoire.
df.toPandas().values.tolist()Exemple
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()Sortie
[['Alice', 1], ['Bob', 2], ['Charlie', 3], ['David', 4]]Méthode 2 : Convertir un DataFrame Spark en liste sans Pandas (recommandé pour les gros volumes)
Si votre jeu de données est important, évitez toujours toPandas().
Utilisez à la place l’API distribuée de Spark :
df.collect()Cela renvoie :
[Row(Name='Alice', Age=1), Row(Name='Bob', Age=2), ...]Pour convertir les lignes en listes Python simples :
[x.asDict().values() for x in df.collect()]Ou convertir chaque ligne en dictionnaire :
[row.asDict() for row in df.collect()]Méthode 3 : Convertir une seule colonne en liste Python
Cas d’usage très courant.
Option A : Via RDD (rapide et scalable)
df.select("Name").rdd.flatMap(lambda x: x).collect()Option B : Via Pandas (petits jeux de données)
df.toPandas()["Name"].tolist()Méthode 4 : Convertir un DataFrame avec index en liste Python
Les DataFrames PySpark n’ont pas d’index intégré, mais vous pouvez en ajouter un manuellement :
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()Convertir en liste de dictionnaires :
df_index.toPandas().to_dict("records")Sortie
[
{'Name': 'Alice', 'Age': 1, 'index': 1},
{'Name': 'Bob', 'Age': 2, 'index': 2},
{'Name': 'Charlie', 'Age': 3, 'index': 3},
{'Name': 'David', 'Age': 4, 'index': 4}
]Notes de performance (à lire absolument)
🚫 Évitez df.toPandas() lorsque :
- Le jeu de données est volumineux
- La mémoire du cluster est limitée
- Les colonnes contiennent de gros objets binaires/texte
✔ Utilisez collect() ou les opérations RDD lorsque :
- Vous travaillez avec des données de taille moyenne à grande
- Vous n’avez besoin que de certaines colonnes
- Vous voulez éviter de surcharger la mémoire du driver
✔ Ne convertissez que ce qui est nécessaire
Au lieu de faire :
df.toPandas()Préférez :
df.select("col_of_interest")Conclusion
PySpark n’inclut pas de fonction .tolist() native, mais convertir un DataFrame en liste Python est très simple en utilisant :
toPandas().values.tolist()— pour les petits jeux de donnéescollect()ou les opérationsrdd— pour les charges de travail scalablesto_dict("records")— pour une sortie compatible JSON
Choisissez la méthode qui correspond à la taille de vos données et à votre workflow.
Références
- 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)
Foire aux questions
1. Comment convertir un DataFrame PySpark en liste Python ?
Utilisez df.collect() ou df.toPandas().values.tolist() selon la taille des données.
2. Comment convertir une seule colonne en liste ?
df.select("col").rdd.flatMap(lambda x: x).collect()3. Comment convertir une ligne Spark en dictionnaire ?
row.asDict()