Delen via


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.

Complexe gegevenstypen transformeren In Python Notebook

Notitieblok ophalen

Scala-notebook voor complexe gegevenstypen transformeren

Haal notitieblok op

Complexe gegevenstypen transformeren in SQL Notebook

Notitieblok ophalen