Trabalhar com dados usando o Spark SQL

Concluído

A API Dataframe faz parte de uma biblioteca do Spark chamada Spark SQL, que permite que os analistas de dados usem expressões SQL para consultar e manipular dados.

Tabelas e o catálogo do Spark

O catálogo do Spark é um metastore para objetos de dados relacionais, como exibições e tabelas. O tempo de execução do Spark pode usar o catálogo para integrar perfeitamente o código escrito em qualquer linguagem suportada pelo Spark com expressões SQL que podem ser mais naturais para alguns analistas de dados ou desenvolvedores.

Uma das maneiras mais simples de disponibilizar dados em um dataframe para consulta no catálogo do Spark é criar uma exibição temporária, conforme mostrado no exemplo de código a seguir:

df.createOrReplaceTempView("products_view")

Uma vista é temporária, o que significa que é automaticamente eliminada no final da sessão atual. Você também pode criar tabelas que são persistentes no catálogo para definir um banco de dados que pode ser consultado usando o Spark SQL.

As tabelas são estruturas de metadados que armazenam seus dados subjacentes no local de armazenamento associado ao catálogo. No Microsoft Fabric, os dados para tabelas gerenciadas são armazenados no local de armazenamento de Tabelas mostrado no data lake, e todas as tabelas criadas usando o Spark são listadas lá.

Você pode criar uma tabela vazia usando o spark.catalog.createTable método ou pode salvar um dataframe como uma tabela usando seu saveAsTable método. A exclusão de uma tabela gerenciada também exclui seus dados subjacentes.

Por exemplo, o código a seguir salva um dataframe como uma nova tabela chamada products:

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

Nota

O catálogo do Spark suporta tabelas baseadas em arquivos em vários formatos. O formato preferido no Microsoft Fabric é delta, que é o formato de uma tecnologia de dados relacionais no Spark chamada Delta Lake. As tabelas delta suportam recursos comumente encontrados em sistemas de banco de dados relacionais, incluindo transações, controle de versão e suporte para streaming de dados.

Além disso, você pode criar tabelas externas usando o spark.catalog.createExternalTable método. As tabelas externas definem metadados no catálogo, mas obtêm seus dados subjacentes de um local de armazenamento externo; geralmente uma pasta na área de armazenamento de arquivos de uma casa do lago. A exclusão de uma tabela externa não exclui os dados subjacentes.

Usando a API SQL do Spark para consultar dados

Você pode usar a API SQL do Spark em código escrito em qualquer idioma para consultar dados no catálogo. Por exemplo, o código PySpark a seguir usa uma consulta SQL para retornar dados da tabela de produtos como um dataframe.

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

Os resultados do exemplo de código seriam semelhantes à tabela a seguir:

ProductID ProductName PreçoListado
771 Montanha 100 Prateado, 38 3399.9900
839 Road-750 Preta, 52 539.9900
... ... ...

Usando código SQL

O exemplo anterior demonstrou como usar a API SQL do Spark para incorporar expressões SQL no código do Spark. Em um bloco de anotações, você também pode usar a mágica para executar o %%sql código SQL que consulta objetos no catálogo, da seguinte forma:

%%sql

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

O exemplo de código SQL retorna um conjunto de resultados que é exibido automaticamente no bloco de anotações como uma tabela:

Categoria Contagem de produtos
Bib-Calções 3
Suportes para bicicletas 1
Suportes para Bicicletas 1
... ...