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
explode()
Använd funktionen för att packa upp värden från ARRAY
och MAP
skriva kolumner.
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 du 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 unika värden samlas in.
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.