Complexe gegevenstypen transformeren
Tijdens het werken met geneste gegevenstypen optimaliseert Azure Databricks bepaalde transformaties standaard. In de volgende codevoorbeelden ziet u patronen voor het werken met complexe en geneste gegevenstypen in Azure Databricks.
Punt notatie voor toegang tot geneste gegevens
U kunt punt notatie (.
) gebruiken om toegang te krijgen tot een geneste veld.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Alle geneste velden selecteren
Gebruik de steroperator (*
) om alle velden in een bepaald veld te selecteren.
Notitie
Hiermee worden geneste velden alleen uitgepakt op de opgegeven diepte.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Een nieuw geneste veld maken
Gebruik de struct()
functie om een nieuw geneste veld te maken.
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
Alle velden in een kolom nesten
Gebruik de steroperator (*
) om alle velden uit een gegevensbron te nesten als één kolom.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Selecteer een benoemd veld uit een geneste kolom
Gebruik vierkante haken []
om geneste velden in een kolom te selecteren.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Geneste elementen uit een kaart of matrix uitploffen
Gebruik de functie explode()
om waarden uit ARRAY
en MAP
typekolommen uit te pakken.
ARRAY
kolommen waarden opslaan als een lijst. Wanneer u deze uitpakt explode()
, wordt elke waarde een rij in de uitvoer.
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
MAP
kolommen waarden opslaan als geordende sleutel-waardeparen. Wanneer het uitgepakt is met explode()
, wordt elke trefwoord een kolom en worden de waarden rijen.
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
Een matrix maken op basis van een lijst of set
Gebruik de functies collect_list()
of collect_set()
om de waarden van een kolom te transformeren in een matrix.
collect_list()
verzamelt alle waarden in de kolom, terwijl collect_set()
alleen unieke waarden verzamelt.
Notitie
Spark garandeert niet de volgorde van items in de matrix die het gevolg zijn van een van beide bewerkingen.
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;
Een kolom selecteren in een kaart in een matrix
U kunt ook puntaantekening (.
) gebruiken om toegang te krijgen tot velden in kaarten die zich in een matrix bevinden. Hiermee wordt een matrix geretourneerd van alle waarden voor het opgegeven veld.
Houd rekening met de volgende gegevensstructuur:
{
"column_name": [
{"field1": 1, "field2":"a"},
{"field1": 2, "field2":"b"}
]
}
U kunt de waarden uit field1
als matrix retourneren met de volgende query:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
Geneste gegevens transformeren naar JSON
Gebruik de to_json
functie om een complex gegevenstype te converteren naar 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
Als u alle inhoud van een query of DataFrame wilt coderen, combineert u dit met 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
Notitie
Azure Databricks biedt ook ondersteuning to_avro
voor en to_protobuf
voor het transformeren van complexe gegevenstypen voor interoperabiliteit met geïntegreerde systemen.
JSON-gegevens transformeren naar complexe gegevens
Gebruik de from_json
functie om JSON-gegevens te converteren naar systeemeigen complexe gegevenstypen.
Notitie
U moet het schema voor de JSON-gegevens opgeven.
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: complexe gegevenstypen transformeren
De volgende notebooks bevatten voorbeelden voor het werken met complexe gegevenstypen voor Python, Scala en SQL.