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.