Összetett adattípusok átalakítása
A beágyazott adattípusok használata során az Azure Databricks bizonyos átalakításokat beépítetten optimalizál. Az alábbi példakódok az Azure Databricks összetett és beágyazott adattípusaival végzett munka mintáit mutatják be.
Pont jelölése beágyazott adatok eléréséhez
A beágyazott mezők eléréséhez használhatja a pontjelet (.
) is.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Az összes beágyazott mező kijelölése
A csillag operátorral (*
) kijelölheti az adott mező összes mezőjét.
Feljegyzés
Ez csak a megadott mélységben csomagolja ki a beágyazott mezőket.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Új beágyazott mező létrehozása
struct()
A függvény használatával hozzon létre egy új beágyazott mezőt.
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
Az összes mező beágyazása egy oszlopba
A csillag operátorral (*
) egyetlen oszlopként ágyazhatja be az adatforrás összes mezőjét.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Névvel ellátott mező kijelölése beágyazott oszlopból
Szögletes zárójelek []
használatával jelöljön ki beágyazott mezőket egy oszlopból.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Beágyazott elemek robbantása térképről vagy tömbből
A függvény használatával explode()
kicsomagolhatja az értékeket az oszlopokból ARRAY
, és MAP
beírhatja az oszlopokat.
ARRAY
az oszlopok listaként tárolják az értékeket. A kicsomagoláskor explode()
minden érték a kimenet sorává válik.
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
az oszlopok rendezett kulcs-érték párokként tárolják az értékeket. Ha ki van csomagolva, explode()
minden kulcs oszlopmá válik, az értékek pedig sorokká.
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
Tömb létrehozása listából vagy csoportból
Használja a függvényeket collect_list()
, vagy collect_set()
alakítsa át egy oszlop értékeit tömbökké.
collect_list()
összegyűjti az oszlop összes értékét, míg collect_set()
csak az egyedi értékeket.
Feljegyzés
A Spark nem garantálja a tömb elemeinek egyik műveletből eredő sorrendjét sem.
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;
Oszlop kijelölése egy tömb térképéből
A tömbökben található térképek mezőinek eléréséhez a pont jelölés (.
) is használható. Ez egy tömböt ad vissza a megadott mező összes értékéből.
Vegye figyelembe a következő adatstruktúrát:
{
"column_name": [
{ "field1": 1, "field2": "a" },
{ "field1": 2, "field2": "b" }
]
}
Az értékeket field1
tömbként a következő lekérdezéssel lehet visszaadni:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
Beágyazott adatok átalakítása JSON-ra
A függvény használatával to_json
összetett adattípust alakíthat át JSON-ra.
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
A lekérdezés vagy a DataFrame összes tartalmának kódolásához kombinálja ezt a lekérdezéssel 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
Feljegyzés
Az Azure Databricks emellett támogatja to_avro
és to_protobuf
átalakítja az összetett adattípusokat az integrált rendszerekkel való együttműködés érdekében.
JSON-adatok átalakítása összetett adatokká
A függvény használatával from_json
a JSON-adatokat natív összetett adattípusokká konvertálhatja.
Feljegyzés
Meg kell adnia a JSON-adatok sémáját.
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
Jegyzetfüzet: összetett adattípusok átalakítása
Az alábbi jegyzetfüzetek példákat nyújtanak a Python, a Scala és az SQL összetett adattípusainak használatára.