Arbeta med data med Spark SQL
Dataframe-API:et är en del av ett Spark-bibliotek med namnet Spark SQL, som gör det möjligt för dataanalytiker att använda SQL-uttryck för att fråga efter och manipulera data.
Skapa databasobjekt i Spark-katalogen
Spark-katalogen är ett metaarkiv för relationsdataobjekt som vyer och tabeller. Spark-körningen kan använda katalogen för att sömlöst integrera kod som skrivits på ett Spark-språk med SQL-uttryck som kan vara mer naturligt för vissa dataanalytiker eller utvecklare.
Ett av de enklaste sätten att göra data i en dataram tillgängliga för frågor i Spark-katalogen är att skapa en tillfällig vy, som du ser i följande kodexempel:
df.createOrReplaceTempView("products_view")
En vy är tillfällig, vilket innebär att den tas bort automatiskt i slutet av den aktuella sessionen. Du kan också skapa tabeller som finns kvar i katalogen för att definiera en databas som kan efterfrågas med Spark SQL.
Tabeller är metadatastrukturer som lagrar sina underliggande data på lagringsplatsen som är associerad med katalogen. I Microsoft Fabric lagras data för hanterade tabeller på lagringsplatsen Tabeller som visas i din datasjö, och alla tabeller som skapas med Spark visas där.
Du kan skapa en tom tabell med hjälp spark.catalog.createTable
av metoden eller så kan du spara en dataram som en tabell med hjälp av dess saveAsTable
metod. Om du tar bort en hanterad tabell tas även dess underliggande data bort.
Följande kod sparar till exempel en dataram som en ny tabell med namnet products:
df.write.format("delta").saveAsTable("products")
Kommentar
Spark-katalogen stöder tabeller baserade på filer i olika format. Det föredragna formatet i Microsoft Fabric är delta, vilket är formatet för en relationsdatateknik på Spark med namnet Delta Lake. Deltatabeller stöder funktioner som ofta finns i relationsdatabassystem, inklusive transaktioner, versionshantering och stöd för strömmande data.
Dessutom kan du skapa externa tabeller med hjälp spark.catalog.createExternalTable
av metoden . Externa tabeller definierar metadata i katalogen men hämtar sina underliggande data från en extern lagringsplats. vanligtvis en mapp i fillagringsområdet i ett sjöhus. Om du tar bort en extern tabell tas inte underliggande data bort.
Dricks
Du kan använda samma partitioneringsteknik för Delta Lake-tabeller som beskrivs för parquet-filer i föregående lektion. Partitionering av tabeller kan ge bättre prestanda när du frågar efter dem.
Använda Spark SQL API för att fråga efter data
Du kan använda Spark SQL API i kod som skrivits på valfritt språk för att fråga efter data i katalogen. Följande PySpark-kod använder till exempel en SQL-fråga för att returnera data från produkttabellen som en dataram.
bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
FROM products \
WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)
Resultatet från kodexemplet skulle se ut ungefär som i följande tabell:
ProductID | ProductName | ListPrice |
---|---|---|
771 | Mountain-100 Silver, 38 | 3399.9900 |
839 | Road-750 Svart, 52 | 539.9900 |
... | ... | ... |
Använda SQL-kod
I föregående exempel visades hur du använder Spark SQL API för att bädda in SQL-uttryck i Spark-kod. I en notebook-fil kan du också använda magin %%sql
för att köra SQL-kod som frågar objekt i katalogen, så här:
%%sql
SELECT Category, COUNT(ProductID) AS ProductCount
FROM products
GROUP BY Category
ORDER BY Category
SQL-kodexemplet returnerar en resultatuppsättning som visas automatiskt i notebook-filen som en tabell:
Kategori | ProductCount |
---|---|
Bib-Shorts | 3 |
Cykelställ | 1 |
Cykelställ | 1 |
... | ... |