Работа с данными с помощью Spark SQL

Завершено

API кадра данных входит в библиотеку Spark с именем Spark SQL, позволяя аналитикам данных использовать выражения SQL для запроса данных и управления ими.

Таблицы и каталог Spark

Каталог Spark — это хранилище метаданных для реляционных объектов данных, таких как представления и таблицы. Среда выполнения Spark может использовать каталог для простой и эффективной интеграции кода, написанного на любом языке, поддерживаемом Spark, с использованием выражений SQL, которые будут более привычными для многих аналитиков и разработчиков данных.

Одним из самых простых способов сделать данные в кадре данных доступными для запроса в каталоге Spark, является создание временного представления, как показано в следующем примере кода:

df.createOrReplaceTempView("products_view")

Представление является временным, то есть оно автоматически удаляется в конце текущего сеанса. Вы также можете создавать таблицы, которые сохраняются в каталоге, чтобы определить базу данных, которую можно запросить с помощью Spark SQL.

Таблицы — это структуры метаданных, базовые данные которых хранятся в расположении хранилища, связанном с каталогом. В Microsoft Fabric данные для управляемых таблиц хранятся в расположении хранилища таблиц , показанном в озере данных, и все таблицы, созданные с помощью Spark, перечислены там.

Можно создать пустую таблицу с помощью spark.catalog.createTable метода или сохранить кадр данных в виде таблицы с помощью его saveAsTable метода. При удалении управляемой таблицы также удаляются базовые данные.

Например, следующий код сохраняет кадр данных в виде новой таблицы с именем продуктов:

df.write.format("delta").saveAsTable("products")

Примечание.

Каталог Spark поддерживает таблицы на основе файлов в различных форматах. Предпочтительный формат в Microsoft Fabric — разностный формат, который является форматом для технологии реляционных данных в Spark с именем Delta Lake. Разностные таблицы поддерживают функции, часто найденные в реляционных системах баз данных, включая транзакции, управление версиями и поддержку потоковых данных.

Кроме того, можно создать внешние таблицы с помощью spark.catalog.createExternalTable метода. Внешние таблицы определяют метаданные в каталоге, но получают их базовые данные из внешнего расположения хранилища; часто папка в области хранилища файлов озера. Удаление внешней таблицы не удаляет базовые данные.

Использование API SQL Spark для запроса данных

API SQL Spark можно использовать в коде, написанном на любом языке, чтобы запрашивать данные в каталоге. Например, следующий код PySpark использует SQL-запрос для возврата данных из таблицы продуктов в качестве кадра данных.

bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
                      FROM products \
                      WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)

Результаты из примера кода будут выглядеть примерно так:

ProductID НаименованиеПродукта ПрейскурантнаяЦена
771 Mountain-100 Silver, 38 3399.9900
839 Road-750 Black, 52 539.9900
... ... ...

Использование кода SQL

В предыдущем примере показано, как использовать API SQL Spark для внедрения выражений SQL в код Spark. В записной книжке можно также использовать магическую команду %%sql для запуска SQL кода, который запрашивает объекты в каталоге, примерно следующим образом:

%%sql

SELECT Category, COUNT(ProductID) AS ProductCount
FROM products
GROUP BY Category
ORDER BY Category

Пример кода SQL возвращает набор результатов, который автоматически отображается в записной книжке в виде таблицы:

Категория ProductCount
Велошорты 3
Багажники для велосипедов 1
Велосипедные стойки 1
... ...