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
- SQL
df.select("column_name.nested_field")
SELECT column_name.nested_field FROM table_name
Sélectionner tous les champs imbriqués
Utilisez l'opérateur étoile (*) pour sélectionner tous les champs au sein d'un champ donné.
Ceci décompresse uniquement les champs imbriqués à la profondeur spécifiée.
- Python
- SQL
df.select("column_name.*")
SELECT column_name.* FROM table_name
Créez un nouveau champ imbriqué
Utilisez la fonction struct() pour créer un nouveau champ imbriqué.
- Python
- SQL
from pyspark.sql.functions import struct, col
df.select(struct(col("field_to_nest").alias("nested_field")).alias("column_name"))
SELECT struct(field_to_nest AS nested_field) AS column_name FROM table_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
- SQL
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SELECT struct(*) AS column_name FROM table_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
- SQL
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SELECT column_name["field_name"] FROM table_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
- SQL
from pyspark.sql.functions import explode
df.select(explode("array_name").alias("column_name"))
SELECT explode(array_name) AS column_name FROM table_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
- SQL
from pyspark.sql.functions import explode
df.select(explode("map_name").alias("column1_name", "column2_name"))
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 en tableau. collect_list() collecte toutes les valeurs de la colonne, tandis que collect_set() ne collecte que les valeurs uniques.
Spark ne garantit pas l'ordre des éléments dans le tableau résultant de l'une ou l'autre opération.
- Python
- SQL
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"))
SELECT collect_list(column_name) AS array_name FROM table_name;
SELECT collect_set(column_name) AS set_name FROM table_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 :
{
"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
- SQL
df.select("column_name.field1")
SELECT column_name.field1 FROM table_name
Transformer les données imbriquées en JSON
Utilisez la fonction to_json pour convertir un type de données complexe en JSON.
- Python
- SQL
from pyspark.sql.functions import to_json
df.select(to_json("column_name").alias("json_name"))
SELECT to_json(column_name) AS json_name FROM table_name
Pour encoder tout le contenu d'une query ou d'un DataFrame, combinez-le avec struct(*).
- Python
- SQL
from pyspark.sql.functions import to_json, struct
df.select(to_json(struct("*")).alias("json_name"))
SELECT to_json(struct(*)) AS json_name FROM table_name
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.
Vous devez spécifier le schéma pour les données JSON.
- Python
- SQL
from pyspark.sql.functions import from_json
schema = "column1 STRING, column2 DOUBLE"
df.select(from_json("json_name", schema).alias("column_name"))
SELECT from_json(json_name, "column1 STRING, column2 DOUBLE") AS column_name FROM table_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.