Omvandla komplexa datatyper
När du arbetar med kapslade datatyper optimerar Azure Databricks vissa transformeringar direkt. Följande kodexempel visar mönster för att arbeta med komplexa och kapslade datatyper i Azure Databricks.
Punkt notation för åtkomst till kapslade data
Du kan använda punkt notation (.
) för att komma åt ett kapslat fält.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Markera alla kapslade fält
Använd stjärnoperatorn (*
) för att markera alla fält inom ett visst fält.
Kommentar
Detta packar bara upp kapslade fält på angivet djup.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Skapa ett nytt kapslat fält
struct()
Använd funktionen för att skapa ett nytt kapslat fält.
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
Kapsla alla fält i en kolumn
Använd stjärnoperatorn (*
) för att kapsla alla fält från en datakälla som en enda kolumn.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Välj ett namngivet fält från en kapslad kolumn
Använd hakparenteser []
för att välja kapslade fält från en kolumn.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Explodera kapslade element från en karta eller matris
Använd funktionen explode()
för att packa upp värden från kolumner av typen ARRAY
och MAP
.
ARRAY
kolumner lagrar värden som en lista. När du packas upp med explode()
blir varje värde en rad i utdata.
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
kolumner lagrar värden som ordnade nyckel/värde-par. När de packas upp med explode()
blir varje nyckel en kolumn och värden blir rader.
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
Skapa en matris från en lista eller uppsättning
Använd funktionerna collect_list()
eller collect_set()
för att omvandla värdena för en kolumn till en matris.
collect_list()
samlar in alla värden i kolumnen, medan collect_set()
endast samlar in unika värden.
Kommentar
Spark garanterar inte ordningen på objekt i matrisen till följd av någon av operationerna.
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;
Välj en kolumn från en karta i en matris
Du kan också använda punkt notation (.
) för att komma åt fält i kartor som finns i en matris. Detta returnerar en matris med alla värden för det angivna fältet.
Överväg följande datastruktur:
{
"column_name": [
{"field1": 1, "field2":"a"},
{"field1": 2, "field2":"b"}
]
}
Du kan returnera värdena från field1
som en matris med följande fråga:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
Transformera kapslade data till JSON
to_json
Använd funktionen för att konvertera en komplex datatyp till 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
Om du vill koda allt innehåll i en fråga eller DataFrame kombinerar du detta med 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
Kommentar
Azure Databricks stöder to_avro
och to_protobuf
för att transformera komplexa datatyper för samverkan med integrerade system.
Transformera JSON-data till komplexa data
from_json
Använd funktionen för att konvertera JSON-data till inbyggda komplexa datatyper.
Kommentar
Du måste ange schemat för JSON-data.
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: transformera komplexa datatyper
Följande notebook-filer innehåller exempel för att arbeta med komplexa datatyper för Python, Scala och SQL.