Dela via


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.

Transformera komplexa datatyper Python Notebook

Hämta notebook-fil

Transformera komplexa datatyper Scala Notebook

Hämta notebook-fil

Transformera komplexa datatyper i SQL Notebook

Hämta notebook-fil