Trabajar con datos con Spark SQL

Completado

Dataframe API forma parte de una biblioteca de Spark denominada Spark SQL, que permite a los analistas de datos usar expresiones SQL para consultar y manipular datos.

Tablas y el catálogo de Spark

El catálogo de Spark es un metastore para objetos de datos relacionales, como vistas y tablas. El entorno de ejecución de Spark puede usar el catálogo para integrar sin problemas el código escrito en cualquier lenguaje compatible con Spark con expresiones SQL que pueden ser más naturales para algunos analistas de datos o desarrolladores.

Una de las formas más sencillas de hacer que los datos de un elemento dataframe estén disponibles para realizar consultas en el catálogo de Spark consiste en crear una vista temporal, como se muestra en el ejemplo de código siguiente:

df.createOrReplaceTempView("products_view")

Una vista es temporal, lo que significa que se elimina automáticamente al final de la sesión actual. También puede crear tablas que se conserven en el catálogo para definir una base de datos que se puede consultar mediante Spark SQL.

Las tablas son estructuras de metadatos que almacenan sus datos subyacentes en la ubicación de almacenamiento asociada al catálogo. En Microsoft Fabric, los datos de las tablas administradas se guardan en la ubicación de almacenamiento Tablas que se muestra en el lago de datos y cualquier tabla creada con Spark se enumera allí.

Puede crear una tabla vacía con el método spark.catalog.createTable o bien puede guardar un objeto DataFrame como tabla mediante su método saveAsTable. Al eliminar una tabla administrada también se eliminan sus datos subyacentes.

Por ejemplo, el código siguiente guarda un objeto DataFrame como una nueva tabla denominada products:

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

Nota:

El catálogo de Spark admite tablas basadas en archivos de varios formatos. El formato preferido en Microsoft Fabric es delta, que es el formato de una tecnología de datos relacionales en Spark llamada Delta Lake. Las tablas delta admiten características que se encuentran normalmente en los sistemas de bases de datos relacionales, incluidas las transacciones, el control de versiones y la compatibilidad con los datos de streaming.

Además, puede crear tablas externas mediante el método spark.catalog.createExternalTable. Las tablas externas definen metadatos en el catálogo, pero obtienen sus datos subyacentes de una ubicación de almacenamiento externa, normalmente, una carpeta en el área de almacenamiento Archivos de un almacén de lago. La eliminación de una tabla externa no elimina los datos subyacentes.

Uso de Spark SQL API para consultar datos

Puede usar Spark SQL API en código escrito en cualquier lenguaje para consultar datos en el catálogo. Por ejemplo, en el código PySpark siguiente se usa una consulta SQL para devolver datos de la tabla products como objeto DataFrame.

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

Los resultados del ejemplo de código serían similares a la tabla siguiente:

ProductID ProductName ListPrice
771 Mountain-100 Silver, 38 3399.9900
839 Road-750 Black, 52 539.9900
... ... ...

Uso de código SQL

En el ejemplo anterior se ha mostrado cómo usar Spark SQL API para insertar expresiones SQL en código de Spark. En un cuaderno, también puede usar el comando magic %%sql para ejecutar código de SQL que consulte objetos en el catálogo, de la siguiente manera:

%%sql

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

El ejemplo de código SQL devuelve un conjunto de resultados que se muestra automáticamente en el cuaderno como una tabla:

Category ProductCount
Pantalones de ciclismo 3
Bastidores de bicicletas 1
Soportes de bicicletas 1
... ...