Aller au contenu principal

Transformer les types de données complexes

Lorsque vous travaillez avec des types de données imbriqués, Databricks optimise certaines transformations prêtes à l'emploi. Les exemples de code suivants démontrent des modèles de travail avec des types de données complexes et imbriqués dans Databricks.

Notation à points pour l’accès aux données imbriquées

Vous pouvez utiliser la notation par points (.) pour accéder à un champ imbriqué.

Python
df.select("column_name.nested_field")

Sélectionner tous les champs imbriqués

Utilisez l'opérateur étoile (*) pour sélectionner tous les champs au sein d'un champ donné.

remarque

Ceci décompresse uniquement les champs imbriqués à la profondeur spécifiée.

Python
df.select("column_name.*")

Créez un nouveau champ imbriqué

Utilisez la fonction struct() pour créer un nouveau champ imbriqué.

Python
from pyspark.sql.functions import struct, col

df.select(struct(col("field_to_nest").alias("nested_field")).alias("column_name"))

Imbriquez tous les champs dans une colonne

Utilisez l'opérateur étoile (*) pour imbriquer tous les champs d'une source de données en tant que colonne unique.

Python
from pyspark.sql.functions import struct

df.select(struct("*").alias("column_name"))

Sélectionnez un champ nommé à partir d'une colonne imbriquée

Utilisez les crochets [] pour sélectionner des champs imbriqués à partir d'une colonne.

Python
from pyspark.sql.functions import col

df.select(col("column_name")["field_name"])

Développer les éléments imbriqués d'une carte ou d'un tableau

Utilisez la fonction explode() pour décompresser les valeurs des colonnes de type ARRAY et MAP.

ARRAY Les colonnes stockent les valeurs sous forme de liste. Lorsque décompressée avec explode(), chaque valeur devient une ligne dans la sortie.

Python
from pyspark.sql.functions import explode

df.select(explode("array_name").alias("column_name"))

MAP Les colonnes stockent des valeurs sous forme de paires clé-valeur ordonnées. Lorsqu'elles sont décompressées avec explode(), chaque clé devient une colonne et les valeurs deviennent des lignes.

Python
from pyspark.sql.functions import explode

df.select(explode("map_name").alias("column1_name", "column2_name"))

Créer un tableau à partir d'une liste ou d'un ensemble

Utilisez les fonctions collect_list() ou collect_set() pour transformer les valeurs d'une colonne en tableau. collect_list() collecte toutes les valeurs de la colonne, tandis que collect_set() ne collecte que les valeurs uniques.

remarque

Spark ne garantit pas l'ordre des éléments dans le tableau résultant de l'une ou l'autre opération.

Python
from pyspark.sql.functions import collect_list, collect_set

df.select(collect_list("column_name").alias("array_name"))
df.select(collect_set("column_name").alias("set_name"))

Sélectionnez une colonne à partir d'une carte dans un tableau

Vous pouvez également utiliser la notation par points (.) pour accéder aux champs dans les cartes contenues dans un tableau. Ceci renvoie un tableau de toutes les valeurs pour le champ spécifié.

Considérez la structure de données suivante :

JSON
{
"column_name": [
{ "field1": 1, "field2": "a" },
{ "field1": 2, "field2": "b" }
]
}

Vous pouvez renvoyer les valeurs de field1 sous forme de tableau avec la query suivante :

Python
df.select("column_name.field1")

Transformer les données imbriquées en JSON

Utilisez la fonction to_json pour convertir un type de données complexe en JSON.

Python
from pyspark.sql.functions import to_json

df.select(to_json("column_name").alias("json_name"))

Pour encoder tout le contenu d'une query ou d'un DataFrame, combinez-le avec struct(*).

Python
from pyspark.sql.functions import to_json, struct

df.select(to_json(struct("*")).alias("json_name"))
remarque

Databricks prend également en charge to_avro et to_protobuf pour transformer les types de données complexes et assurer l'interopérabilité avec les systèmes intégrés.

Transformer les données JSON en données complexes

Utilisez la fonction from_json pour convertir les données JSON en types de données complexes natifs.

remarque

Vous devez spécifier le schéma pour les données JSON.

Python
from pyspark.sql.functions import from_json

schema = "column1 STRING, column2 DOUBLE"

df.select(from_json("json_name", schema).alias("column_name"))

Notebook : transformer les types de données complexes

Les Notebooks suivants fournissent des exemples pour travailler avec des types de données complexes pour Python, Scala et SQL.

Notebook Python : Transformation des types de données complexes

Transformation des types de données complexes Notebook Scala

Transformation des types de données complexes Notebook SQL