Sdílet prostřednictvím


Transformace složitých datových typů

Při práci s vnořenými datovými typy azure Databricks optimalizuje určité transformace, které jsou před sebou. Následující příklady kódu ukazují vzory pro práci se složitými a vnořenými datovými typy v Azure Databricks.

Zápis tečky pro přístup k vnořeným datům

Pro přístup k vnořenému poli můžete použít tečkovanou notaci (.).

Python

df.select("column_name.nested_field")

SQL

SELECT column_name.nested_field FROM table_name

Výběr všech vnořených polí

Pomocí operátoru hvězdičky (*) vyberte všechna pole v daném poli.

Poznámka:

Tím se rozbalí pouze vnořená pole v zadané hloubkě.

Python

df.select("column_name.*")

SQL

SELECT column_name.* FROM table_name

Vytvoření nového vnořeného pole

struct() Pomocí funkce vytvořte nové vnořené pole.

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

Vnoření všech polí do sloupce

Pomocí operátoru hvězdičky (*) vnořte všechna pole ze zdroje dat jako jeden sloupec.

Python

from pyspark.sql.functions import struct

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

SQL

SELECT struct(*) AS column_name FROM table_name

Výběr pojmenovaného pole z vnořeného sloupce

Pomocí hranatých závorek [] vyberte vnořená pole ze sloupce.

Python

from pyspark.sql.functions import col

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

SQL

SELECT column_name["field_name"] FROM table_name

Rozložení vnořených prvků z mapy nebo pole

explode() Pomocí funkce rozbalte hodnoty ze ARRAY sloupců a MAP zadejte je.

ARRAY sloupce ukládají hodnoty jako seznam. Při rozbalení s každým řádkem explode()ve výstupu se každá hodnota stane řádkem.

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 sloupce ukládají hodnoty jako seřazené páry klíč-hodnota. Při rozbalení s explode()každým klíčem se stane sloupec a hodnoty se stanou řádky.

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

Vytvoření pole ze seznamu nebo sady

Pomocí funkcí collect_list() nebo collect_set() transformujte hodnoty sloupce na pole. collect_list() shromažďuje všechny hodnoty ve sloupci, zatímco collect_set() shromažďuje pouze jedinečné hodnoty.

Poznámka:

Spark nezaručuje pořadí položek v poli, které je výsledkem jedné z operací.

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ýběr sloupce z mapy v poli

Pro přístup k polím v mapách, které jsou obsaženy v poli, můžete také použít zápis tečky (.). Vrátí pole všech hodnot pro zadané pole.

Vezměte v úvahu následující datovou strukturu:

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

Hodnoty můžete vrátit jako field1 pole pomocí následujícího dotazu:

Python

df.select("column_name.field1")

SQL

SELECT column_name.field1 FROM table_name

Transformace vnořených dat na JSON

to_json Pomocí funkce můžete převést komplexní datový typ na 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

Chcete-li kódovat veškerý obsah dotazu nebo datového rámce, zkombinujte ho s 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

Poznámka:

Azure Databricks také podporuje to_avro a to_protobuf transformuje složité datové typy pro interoperabilitu s integrovanými systémy.

Transformace dat JSON na složitá data

from_json Pomocí funkce můžete převést data JSON na nativní komplexní datové typy.

Poznámka:

Musíte zadat schéma pro data JSON.

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

Poznámkový blok: Transformace složitých datových typů

Následující poznámkové bloky obsahují příklady pro práci se složitými datovými typy pro Python, Scala a SQL.

Transformace složitých datových typů v poznámkovém bloku Pythonu

Získat poznámkový blok

Transformace složitých datových typů v poznámkovém bloku Scala

Získat poznámkový blok

Transformace složitých datových typů v poznámkovém bloku SQL

Získat poznámkový blok