Skip to content

Comment convertir une colonne de DataFrame PySpark en liste Python ?

Si vous travaillez avec des DataFrames PySpark, vous devrez peut-être extraire une colonne du DataFrame et l'utiliser comme une liste Python pour des analyses ultérieures. Dans cet article, nous explorerons différentes façons d'extraire une colonne de DataFrame PySpark dans une liste Python. Nous commencerons par les bases du DataFrame PySpark, puis nous plongerons dans plusieurs méthodes pour extraire des colonnes.

Vous souhaitez créer rapidement des visualisations de données à partir d'un DataFrame Python Pandas sans écrire de code ?

PyGWalker est une bibliothèque Python pour l'analyse exploratoire de données avec visualisation. PyGWalker (opens in a new tab) peut simplifier votre flux de travail d'analyse et de visualisation de données dans Jupyter Notebook en transformant votre DataFrame pandas (et DataFrame polars) en une interface utilisateur de style Tableau pour l'exploration visuelle.

PyGWalker pour la visualisation des données (opens in a new tab)

Introduction à DataFrame PySpark

Un DataFrame est une collection distribuée de données organisées en colonnes nommées. Il est conceptuellement équivalent à une table dans une base de données relationnelle ou un data frame dans R ou Python. Le DataFrame PySpark est un ensemble de données RDD (Resilient Distributed Dataset, ensemble de données résilientes distribuées) de lignes ayant un schéma. PySpark SQL fournit une interface de programmation pour travailler avec des données structurées en utilisant Spark. PySpark prend en charge la plupart des sources de données courantes telles que CSV, JSON, Avro, Parquet, etc.

Pour mieux comprendre, créons un simple DataFrame PySpark et vérifions son schéma en utilisant PySpark SQL.

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, IntegerType, StringType
 
# Créer une session Spark
spark = SparkSession.builder.appName("Exemples_PySpark").getOrCreate()
 
# Définir le schéma
schema = StructType([
    StructField("id", IntegerType(), True),
    StructField("name", StringType(), True)])
 
# Créer le DataFrame
data = [(1, "John"), (2, "Mary"), (3, "Smith"), (4, "James")]
df = spark.createDataFrame(data, schema=schema)
 
# Afficher le DataFrame
df.show()

Le résultat ressemblera à ceci :

+---+-----+
| id| name|
+---+-----+
|  1| John|
|  2| Mary|
|  3|Smith|
|  4|James|
+---+-----+

Extraction d'une seule colonne en tant que liste

Il existe différentes façons d'extraire une colonne du DataFrame PySpark. Nous en explorerons quelques-unes dans cette section.

Méthode 1 : Utilisation de la fonction Collect

La fonction collect() en PySpark est utilisée pour renvoyer tous les éléments du RDD (Resilient Distributed Datasets, ensemble de données résilientes distribuées) vers le programme pilote sous la forme d'un tableau. Nous pouvons utiliser collect() pour convertir une colonne du DataFrame PySpark en une liste Python. Voici comment :

# Extraire la colonne name en utilisant collect()
name_list = df.select('name').rdd.flatMap(lambda x: x).collect()
 
# Afficher la liste
print(name_list)

Le résultat ressemblera à ceci :

[u'John', u'Mary', u'Smith', u'James']

Ici, nous avons utilisé la fonction select() pour sélectionner la colonne "name" du DataFrame. Nous avons ensuite utilisé rdd.flatMap(lambda x: x) pour convertir la colonne en RDD, puis collect() pour obtenir les données sous forme d'une liste Python.

Méthode 2 : Utilisation de la compréhension de liste

Une autre manière d'extraire une colonne d'un DataFrame PySpark en tant que liste Python est d'utiliser la compréhension de liste. Voici comment :

# Extraire la colonne name en utilisant la compréhension de liste
name_list = [row.name for row in df.select('name').collect()]
 
# Afficher la liste
print(name_list)

Le résultat ressemblera à ceci :

[u'John', u'Mary', u'Smith', u'James']

Ici, nous avons utilisé la compréhension de liste pour extraire la colonne "name" du DataFrame en tant que liste Python. Nous avons d'abord utilisé la fonction select() pour extraire la colonne, puis collect() pour récupérer les données dans le programme pilote.

Méthode 3 : Utilisation de la fonction toPandas()

Nous pouvons également extraire une colonne du DataFrame PySpark en tant que liste Python en utilisant la fonction toPandas(). Cependant, cette méthode n'est pas recommandée pour les grands DataFrames car elle peut provoquer des erreurs de mémoire. Voici comment :

# Extraire la colonne name en utilisant toPandas()
name_list = df.select('name').toPandas()['name'].tolist()
 
# Afficher la liste
print(name_list)

Le résultat ressemblera à ceci :

['John', 'Mary', 'Smith', 'James']

Ici, nous avons utilisé la fonction select() pour sélectionner la colonne "name" du DataFrame, puis nous avons converti le DataFrame en un DataFrame Pandas en utilisant la fonction toPandas(). Enfin, nous avons utilisé la fonction tolist() pour convertir la série Pandas en une liste Python.

Conclusion

Dans cet article, nous avons exploré différentes méthodes pour extraire une colonne de DataFrame PySpark dans une liste Python, telles que l'utilisation de la fonction collect(), la compréhension de liste et la fonction toPandas(). PySpark offre un moyen efficace de traiter de grands ensembles de données en parallèle en répartissant le travail sur plusieurs nœuds d'une grappe. Comprendre le DataFrame PySpark et savoir comment extraire des données à partir de celui-ci est une compétence précieuse pour tout scientifique des données ou ingénieur travaillant avec de grands ensembles de données.

Nous espérons que cet article vous a été utile et que vous savez maintenant comment extraire une colonne de DataFrame PySpark dans une liste Python. Si vous souhaitez en savoir plus sur PySpark et Pandas, consultez nos autres tutoriels.


Liens :