Trasformare tipi di dati complessi
Durante l'uso dei tipi di dati annidati, Azure Databricks ottimizza alcune trasformazioni predefinite. Gli esempi di codice seguenti illustrano i criteri per l'uso di tipi di dati complessi e annidati in Azure Databricks.
Notazione con punto per l'accesso ai dati annidati
Usare la notazione con punto (.
) per accedere ai campi annidati.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Selezionare tutti i campi annidati
Usare l'operatore star (*
) per selezionare tutti i campi all'interno di un determinato campo.
Nota
In questo modo vengono decompressi solo i campi annidati alla profondità specificata.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Creare un nuovo campo annidato
Usare la funzione struct()
per creare un nuovo campo annidato.
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
Annidare tutti i campi in una colonna
Usare l'operatore star (*
) per annidare tutti i campi da un'origine dati come singola colonna.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Selezionare un campo denominato da una colonna nidificata
Usare le parentesi quadre []
per selezionare i campi annidati da una colonna.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Esplodere elementi annidati da una mappa o matrice
Usare la funzione explode()
per decomprimere i valori dalle colonne di tipo ARRAY
e MAP
.
Le colonne ARRAY
archiviano i valori come elenco. Quando viene decompresso con explode()
, ogni valore diventa una riga nell'output.
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
Le colonne MAP
archiviano i valori come coppie chiave-valore ordinate. Quando viene decompressa con explode()
, ogni chiave diventa una colonna e i valori diventano righe.
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
Creare una matrice da un elenco o un set
Usare le funzioni collect_list()
o collect_set()
per trasformare i valori di una colonna in una matrice. collect_list()
raccoglie tutti i valori nella colonna, mentre collect_set()
raccoglie solo valori univoci.
Nota
Spark non garantisce l'ordine degli elementi nella matrice risultante da una delle due operazioni.
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;
Selezionare una colonna da una mappa in una matrice
È anche possibile usare la notazione con punto (.
) per accedere ai campi nelle mappe contenute all'interno di una matrice. Viene restituita una matrice di tutti i valori per il campo specificato.
Si consideri la struttura di dati seguente:
{
"column_name": [
{"field1": 1, "field2":"a"},
{"field1": 2, "field2":"b"}
]
}
È possibile restituire i valori da field1
come matrice con la query seguente:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
Trasformare i dati annidati in JSON
Usare la funzione to_json
per convertire un tipo di dati complesso in 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
Per codificare tutto il contenuto di una query o di un dataframe, combinarlo con 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
Nota
Azure Databricks supporta anche to_avro
e to_protobuf
per trasformare tipi di dati complessi per l'interoperabilità con sistemi integrati.
Trasformare i dati JSON in dati complessi
Usare la funzione from_json
per convertire i dati JSON in tipi di dati complessi nativi.
Nota
È necessario specificare lo schema per i dati 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: trasformare tipi di dati complessi
I notebook seguenti forniscono esempi per l'uso di tipi di dati complessi per Python, Scala e SQL.