Werken met gegevens met Spark SQL
De Dataframe-API maakt deel uit van een Spark-bibliotheek met de naam Spark SQL, waarmee gegevensanalisten SQL-expressies kunnen gebruiken om gegevens op te vragen en te bewerken.
Tabellen en de Spark-catalogus
De Spark-catalogus is een metastore voor relationele gegevensobjecten, zoals weergaven en tabellen. De Spark-runtime kan de catalogus gebruiken om code die is geschreven in elke door Spark ondersteunde taal naadloos te integreren met SQL-expressies die mogelijk natuurlijker zijn voor sommige gegevensanalisten of ontwikkelaars.
Een van de eenvoudigste manieren om gegevens beschikbaar te maken in een dataframe voor het uitvoeren van query's in de Spark-catalogus is het maken van een tijdelijke weergave, zoals wordt weergegeven in het volgende codevoorbeeld:
df.createOrReplaceTempView("products_view")
Een weergave is tijdelijk, wat betekent dat deze automatisch wordt verwijderd aan het einde van de huidige sessie. U kunt ook tabellen maken die in de catalogus worden bewaard om een database te definiƫren waarop query's kunnen worden uitgevoerd met behulp van Spark SQL.
Tabellen zijn metagegevensstructuren waarmee de onderliggende gegevens worden opgeslagen op de opslaglocatie die is gekoppeld aan de catalogus. In Microsoft Fabric worden gegevens voor beheerde tabellen opgeslagen in de opslaglocatie Tabellen die worden weergegeven in uw data lake en worden alle tabellen die met Spark zijn gemaakt, daar weergegeven.
U kunt een lege tabel maken met behulp van de spark.catalog.createTable
methode of u kunt een dataframe opslaan als een tabel met behulp van saveAsTable
de bijbehorende methode. Als u een beheerde tabel verwijdert, worden ook de onderliggende gegevens verwijderd.
Met de volgende code wordt bijvoorbeeld een dataframe opgeslagen als een nieuwe tabel met de naam producten:
df.write.format("delta").saveAsTable("products")
Notitie
De Spark-catalogus ondersteunt tabellen op basis van bestanden in verschillende indelingen. De voorkeursindeling in Microsoft Fabric is delta. Dit is de indeling voor een relationele gegevenstechnologie in Spark met de naam Delta Lake. Delta-tabellen ondersteunen functies die vaak worden gevonden in relationele databasesystemen, waaronder transacties, versiebeheer en ondersteuning voor streaminggegevens.
Daarnaast kunt u externe tabellen maken met behulp van de spark.catalog.createExternalTable
methode. Externe tabellen definiƫren metagegevens in de catalogus, maar halen hun onderliggende gegevens op uit een externe opslaglocatie; vaak een map in het opslaggebied Bestanden van een lakehouse. Als u een externe tabel verwijdert, worden de onderliggende gegevens niet verwijderd.
De Spark SQL-API gebruiken om query's uit te voeren op gegevens
U kunt de Spark SQL-API gebruiken in code die in elke taal is geschreven om query's uit te voeren op gegevens in de catalogus. De volgende PySpark-code maakt bijvoorbeeld gebruik van een SQL-query om gegevens uit de productentabel als een dataframe te retourneren.
bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
FROM products \
WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)
De resultaten uit het codevoorbeeld lijken op de volgende tabel:
ProductID | ProductName | ListPrice |
---|---|---|
771 | Berg-100 zilver, 38 | 3399.9900 |
839 | Road-750 zwart, 52 | 539.9900 |
... | ... | ... |
SQL-code gebruiken
In het vorige voorbeeld is gedemonstreerd hoe u de Spark SQL-API gebruikt om SQL-expressies in te sluiten in Spark-code. In een notebook kunt u ook de %%sql
magic gebruiken om SQL-code uit te voeren waarmee query's worden uitgevoerd op objecten in de catalogus, zoals deze:
%%sql
SELECT Category, COUNT(ProductID) AS ProductCount
FROM products
GROUP BY Category
ORDER BY Category
Het SQL-codevoorbeeld retourneert een resultatenset die automatisch wordt weergegeven in het notebook als een tabel:
Categorie | ProductCount |
---|---|
Bib-Shorts | 3 |
Fietsenrekken | 1 |
Fietsstandaarden | 1 |
... | ... |