Partager via


Transformer des types de données complexes

Lors de l’utilisation de types de données imbriqués, Azure Databricks optimise certaines transformations par défaut. Les exemples de code suivants montrent des modèles pour utiliser des types de données imbriquées et complexes dans Azure Databricks.

Notation par points pour accéder à des données imbriquées

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

Python

df.select("column_name.nested_field")

SQL

SELECT column_name.nested_field FROM table_name

Sélectionner tous les champs imbriqués

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

Remarque

Cette opération décompresse des champs imbriqués à la profondeur spécifiée.

Python

df.select("column_name.*")

SQL

SELECT column_name.* FROM table_name

Créer un champ imbriqué

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

Python

from pyspark.sql.functions import struct, col

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

SQL

SELECT struct(field_to_nest AS nested_field) AS column_name FROM table_name

Imbriquer tous les champs dans une colonne

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

Python

from pyspark.sql.functions import struct

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

SQL

SELECT struct(*) AS column_name FROM table_name

Sélectionner un fichier nommé d’une colonne imbriquée

Utilisez des crochets angulaires [] 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"])

SQL

SELECT column_name["field_name"] FROM table_name

Éclater des éléments imbriqués à partir d’une carte ou d’un tableau

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

Les colonnes ARRAY stockent les valeurs en tant que liste. Lors d’une décompression avec explode(), chaque valeur devient une ligne dans le résultat.

Python

from pyspark.sql.functions import explode

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

SQL

SELECT explode(array_name) AS column_name FROM table_name

Les colonnes MAP stockent les valeurs en tant que paires clé-valeur ordonnées. Lors d’une décompression 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"))

SQL

SELECT explode(map_name) AS (column1_name, column2_name) FROM table_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 dans un tableau. collect_list() collecte toutes les valeurs d’une colonne, alors que collect_set() collecte uniquement les valeurs uniques.

Remarque

Spark ne garantit pas l’ordre des éléments dans le tableau résultant de l’une de ces opérations.

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"))

SQL

SELECT collect_list(column_name) AS array_name FROM table_name;
SELECT collect_set(column_name) AS set_name FROM table_name;

Sélectionner une colonne à partir d’une carte dans un tableau

Vous pouvez également utiliser la notation par points (.) pour accéder aux champs de cartes contenus dans un tableau. Cette opération retourne un tableau de toutes les valeurs pour le champ spécifié.

Tenez compte de la structure de données suivante :

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

Vous pouvez retourner les valeurs de field1 en tant que tableau à l’aide de la requête suivante :

Python

df.select("column_name.field1")

SQL

SELECT column_name.field1 FROM table_name

Transformer des 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"))

SQL

SELECT to_json(column_name) AS json_name FROM table_name

Pour coder tout le contenu d’une requête ou DataFrame, associez-le à struct(*).

Python

from pyspark.sql.functions import to_json, struct

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

SQL

SELECT to_json(struct(*)) AS json_name FROM table_name

Remarque

Azure Databricks prend également en charge to_avro et to_protobuf afin de transformer des types de données complexes pour l’interopérabilité avec des systèmes intégrés.

Transformer des données JSON en données complexes

Utilisez la fonction from_json pour convertir des 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"))

SQL

SELECT from_json(json_name, "column1 STRING, column2 DOUBLE") AS column_name FROM table_name

Notebook : transformer des types de données complexes

Les notebooks suivants fournissent des exemples afin d’utiliser des types de données complexes pour Python, Scala et SQL.

Notebook Python de transformation de types de données complexes

Obtenir le notebook

Notebook Scala de transformation de types de données complexes

Obtenir le notebook

Notebook SQL de transformation de types de données complexes

Obtenir le notebook