Преобразование сложных типов данных
При работе с вложенными типами данных Azure Databricks оптимизирует определенные преобразования в стандартном виде. В следующих примерах кода показаны шаблоны для работы с сложными и вложенными типами данных в Azure Databricks.
Нотация точек для доступа к вложенным данным
Для доступа к вложенного поля можно использовать нотацию точек (.
).
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Выберите все вложенные поля
Используйте оператор star (*
) для выбора всех полей в заданном поле.
Примечание.
Это только распаковка вложенных полей на указанной глубине.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Создание вложенного поля
Используйте функцию struct()
для создания нового вложенного поля.
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
Вложение всех полей в столбец
Используйте оператор звездочки (*
) для вложения всех полей из источника данных в виде одного столбца.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Выберите именованное поле из вложенного столбца
Используйте квадратные скобки для выбора вложенных []
полей из столбца.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Взрыв вложенных элементов из карты или массива
Используйте функцию для распаковки значений explode()
из ARRAY
столбцов и MAP
типов.
ARRAY
столбцы хранят значения в виде списка. При распаковке explode()
с каждым значением становится строка в выходных данных.
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
столбцы хранят значения в виде упорядоченных пар "ключ-значение". При распаковке с explode()
каждым ключом становится столбец и значения становятся строками.
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
Создание массива из списка или набора
Используйте функции collect_list()
или collect_set()
преобразуйте значения столбца в массив. collect_list()
собирает все значения в столбце, а collect_set()
собирает только уникальные значения.
Примечание.
Spark не гарантирует порядок элементов в массиве в результате любой операции.
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;
Выбор столбца из карты в массиве
Вы также можете использовать нотацию точек (.
) для доступа к полям в картах, содержащихся в массиве. Возвращает массив всех значений для указанного поля.
Рассмотрим следующую структуру данных:
{
"column_name": [
{"field1": 1, "field2":"a"},
{"field1": 2, "field2":"b"}
]
}
Значения из массива можно вернуть с field1
помощью следующего запроса:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
Преобразование вложенных данных в JSON
Используйте функцию to_json
для преобразования сложного типа данных в 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
Чтобы закодировать все содержимое запроса или кадра данных, объедините его с 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
Примечание.
Azure Databricks также поддерживает to_avro
и to_protobuf
преобразует сложные типы данных для взаимодействия с интегрированными системами.
Преобразование данных JSON в сложные данные
Используйте функцию для преобразования данных JSON в собственные сложные from_json
типы данных.
Примечание.
Необходимо указать схему для данных 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
Записная книжка: преобразование сложных типов данных
В следующих записных книжках приведены примеры работы с сложными типами данных для Python, Scala и SQL.