Przekształcanie złożonych typów danych
Podczas pracy z zagnieżdżonymi typami danych usługa Azure Databricks optymalizuje pewne przekształcenia gotowe do użycia. W poniższych przykładach kodu przedstawiono wzorce pracy ze złożonymi i zagnieżdżonym typami danych w usłudze Azure Databricks.
Notacja kropkowa na potrzeby uzyskiwania dostępu do danych zagnieżdżonych
Możesz użyć notacji kropkowej (.
), aby uzyskać dostęp do zagnieżdżonego pola.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Zaznacz wszystkie zagnieżdżone pola
Użyj operatora gwiazdki (*
), aby wybrać wszystkie pola w danym polu.
Uwaga
To tylko rozpakowywanie zagnieżdżonych pól na określonej głębokości.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Tworzenie nowego zagnieżdżonego pola
struct()
Użyj funkcji , aby utworzyć nowe zagnieżdżone 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
Zagnieżdżanie wszystkich pól do kolumny
Użyj operatora gwiazdki (*
), aby zagnieżdżać wszystkie pola ze źródła danych jako jedną kolumnę.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Wybieranie nazwanego pola z kolumny zagnieżdżonej
Użyj nawiasów kwadratowych []
, aby wybrać pola zagnieżdżone z kolumny.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Eksploduj zagnieżdżone elementy z mapy lub tablicy
explode()
Użyj funkcji , aby rozpakować wartości z ARRAY
kolumn i MAP
wpisz je.
ARRAY
kolumny przechowują wartości jako listę. Po rozpakowaniu z wartością explode()
każda wartość staje się wierszem w danych wyjściowych.
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
kolumny przechowują wartości jako uporządkowane pary klucz-wartość. Po rozpakowaniu z elementem explode()
każdy klucz staje się kolumną, a wartości stają się wierszami.
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
Tworzenie tablicy na podstawie listy lub zestawu
Użyj funkcji collect_list()
lub collect_set()
, aby przekształcić wartości kolumny w tablicę.
collect_list()
zbiera wszystkie wartości w kolumnie, a jednocześnie collect_set()
zbiera tylko unikatowe wartości.
Uwaga
Platforma Spark nie gwarantuje kolejności elementów w tablicy wynikającej z żadnej operacji.
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;
Wybieranie kolumny z mapy w tablicy
Możesz również użyć notacji kropkowej (.
), aby uzyskać dostęp do pól w mapach zawartych w tablicy. Zwraca tablicę wszystkich wartości dla określonego pola.
Rozważmy następującą strukturę danych:
{
"column_name": [
{ "field1": 1, "field2": "a" },
{ "field1": 2, "field2": "b" }
]
}
Możesz zwrócić wartości z field1
tablicy przy użyciu następującego zapytania:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
Przekształcanie danych zagnieżdżonych do formatu JSON
to_json
Użyj funkcji , aby przekonwertować złożony typ danych na format 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
Aby zakodować całą zawartość zapytania lub ramki danych, połącz je z elementem 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
Uwaga
Usługa Azure Databricks obsługuje to_avro
również i to_protobuf
przekształca złożone typy danych w celu współdziałania ze zintegrowanymi systemami.
Przekształcanie danych JSON na złożone dane
from_json
Użyj funkcji , aby przekonwertować dane JSON na natywne złożone typy danych.
Uwaga
Należy określić schemat danych 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
Notes: przekształcanie złożonych typów danych
Poniższe notesy zawierają przykłady pracy ze złożonymi typami danych dla języków Python, Scala i SQL.