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.