Freigeben über


Transformieren komplexer Datentypen

Bei der Arbeit mit geschachtelten Datentypen optimiert Azure Databricks bestimmte Transformationen für den direkten Einsatz. Die folgenden Codebeispiele veranschaulichen Muster für das Arbeiten mit komplexen und geschachtelten Datentypen in Azure Databricks.

Punktnotation für den Zugriff auf geschachtelte Daten

Sie können die Punktnotation (.) verwenden, um auf ein geschachteltes Feld zuzugreifen.

Python

df.select("column_name.nested_field")

SQL

SELECT column_name.nested_field FROM table_name

Alle geschachtelten Felder auswählen

Verwenden Sie den Sternoperator (*), um alle Felder in einem bestimmten Feld auszuwählen.

Hinweis

Dadurch werden nur geschachtelte Felder in der angegebenen Tiefe entpackt.

Python

df.select("column_name.*")

SQL

SELECT column_name.* FROM table_name

Erstellen eines neuen geschachtelten Felds

Verwenden Sie die struct()-Funktion, um ein neues geschachteltes Feld zu erstellen.

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

Schachteln aller Felder in einer Spalte

Verwenden Sie den Sternoperator (*), um alle Felder aus einer Datenquelle als einzelne Spalte zu verschachteln.

Python

from pyspark.sql.functions import struct

df.select(struct("*").alias("column_name"))

SQL

SELECT struct(*) AS column_name FROM table_name

Auswählen eines benannten Felds aus einer geschachtelten Spalte

Verwenden Sie eckige Klammern [], um geschachtelte Felder aus einer Spalte auszuwählen.

Python

from pyspark.sql.functions import col

df.select(col("column_name")["field_name"])

SQL

SELECT column_name["field_name"] FROM table_name

Explode von geschachtelten Elementen aus einer Zuordnung oder einem Array

Verwenden Sie die explode()-Funktion, um Werte aus ARRAY- und MAP-Spalten zu entpacken.

ARRAY-Spalten speichern Werte als Liste. Beim Entpacken mit explode() wird jeder Wert zu einer Zeile in der Ausgabe.

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-Spalten speichern Werte als sortierte Schlüsselwertpaare. Wenn sie mit explode() entpackt werden, wird jeder Schlüssel zu einer Spalte, und die Werte werden zu Zeilen.

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

Erstellen eines Arrays aus einer Liste oder Gruppe

Verwenden Sie die Funktionen collect_list() oder collect_set(), um die Werte einer Spalte in ein Array zu transformieren. collect_list() erfasst alle Werte in der Spalte, während collect_set() nur eindeutige Werte erfasst.

Hinweis

Spark garantiert nicht die Reihenfolge der Elemente im Array, die sich aus beiden Vorgängen ergeben.

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;

Auswählen einer Spalte aus einer Zuordnung in einem Array

Sie können auch Punktnotation (.) verwenden, um auf Felder in Zuordnungen zuzugreifen, die in einem Array enthalten sind. Dadurch wird ein Array aller Werte für das angegebene Feld zurückgegeben.

Betrachten Sie die folgende Datenstruktur:

{
  "column_name": [
    {"field1": 1, "field2":"a"},
    {"field1": 2, "field2":"b"}
  ]
}

Sie können die Werte aus field1 als Array mit der folgenden Abfrage zurückgeben:

Python

df.select("column_name.field1")

SQL

SELECT column_name.field1 FROM table_name

Transformieren geschachtelter Daten in JSON

Verwenden Sie die to_json-Funktion, um einen komplexen Datentyp in JSON zu konvertieren.

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

Wenn Sie alle Inhalte einer Abfrage oder eines DataFrame codieren möchten, kombinieren Sie dies mit 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

Hinweis

Azure Databricks unterstützt auch to_avro und to_protobuf zum Transformieren komplexer Datentypen für die Interoperabilität mit integrierten Systemen.

Transformieren von JSON-Daten in komplexe Daten

Verwenden Sie die from_json-Funktion, um JSON-Daten in systemeigene komplexe Datentypen zu konvertieren.

Hinweis

Sie müssen das Schema für die JSON-Daten angeben.

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: Transformieren komplexer Datentypen

Die folgenden Notebooks enthalten Beispiele für das Arbeiten mit komplexen Datentypen für Python, Scala und SQL.

Transformieren komplexer Datentypen in einem Python-Notebook

Notebook abrufen

Transformieren komplexer Datentypen in einem Scala-Notebook

Notebook abrufen

Transformieren komplexer Datentypen in einem SQL-Notebook

Notebook abrufen