Condividi tramite


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.

Trasformazione di tipi di dati complessi notebook Python

Ottenere il notebook

Trasformazione di tipi di dati complessi notebook Scala

Ottenere il notebook

Trasformazione di tipi di dati complessi notebook SQL

Ottenere il notebook