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.