PySpark på Azure Databricks
Azure Databricks bygger på Apache Spark, en enhetlig analysmotor för stordata och maskininlärning. PySpark hjälper dig att interagera med Apache Spark med programmeringsspråket Python, som är ett flexibelt språk som är enkelt att lära sig, implementera och underhålla. Det innehåller också många alternativ för datavisualisering i Databricks. PySpark kombinerar kraften i Python och Apache Spark.
Den här artikeln innehåller en översikt över grunderna i PySpark på Databricks.
Introduktion till Spark-begrepp
Det är viktigt att förstå viktiga Apache Spark-begrepp innan du börjar använda PySpark.
DataFrames
DataFrames är de primära objekten i Apache Spark. En DataFrame är en datauppsättning som är organiserad i med namnet columns. Du kan tänka dig en DataFrame som ett kalkylblad eller en SQL-table, en tvådimensionell etiketterad datastruktur för en serie poster (liknar rader i en table) och columns av olika typer. DataFrames ger en omfattande set funktioner (till exempel selectcolumns, filter, joinoch aggregering) som gör att du kan utföra vanliga datamanipulerings- och analysuppgifter effektivt.
Några viktiga DataFrame-element är:
- Schema: En schema definierar column namn och typer av en DataFrame. Dataformat har olika semantik för schema definition och tillämpning. Vissa datakällor tillhandahåller schema information, medan andra antingen förlitar sig på manuell schema definition eller tillåter schema slutsatsdragning. Användare kan definiera scheman manuellt eller så kan scheman läsas från en datakälla.
-
Rader: Spark representerar poster i en DataFrame som
Row
objekt. Medan underliggande dataformat som Delta Lake använder columns för att lagra data, för optimering cachelagrar Spark och blandar data med hjälp av rader. -
Columns: Columns i Spark liknar columns i ett kalkylblad och kan representera en enkel typ, till exempel en sträng eller ett heltal, men även komplexa typer som matris, karta eller null. Du kan skriva frågor som select, manipulera eller removecolumns från en datakälla. Möjliga datakällor är tables, views, filer eller andra DataFrames.
Columns tas aldrig bort från en datauppsättning eller en DataFrame, de utelämnas bara från resultaten genom
.drop
-transformeringar eller utelämnanden iselect
-uttryck.
Databehandling
Apache Spark använder lat utvärdering för att bearbeta transformeringar och åtgärder som definierats med DataFrames. Dessa begrepp är grundläggande för att förstå databehandling med Spark.
Transformeringar: I Spark uttrycker du bearbetningslogik som transformeringar, vilket är instruktioner för att läsa in och manipulera data med dataramar. Vanliga transformeringar är läsning av data, kopplingar, sammansättningar och typgjutning. Information om transformeringar i Azure Databricks finns i Transformera data.
Lazy Evaluation: Spark optimerar databehandlingen genom att identifiera den mest effektiva fysiska planen för att utvärdera logik som anges av transformeringar. Spark agerar dock inte på transformeringar förrän åtgärder anropas. I stället för att utvärdera varje transformering i exakt den angivna ordningen väntar Spark tills en åtgärd utlöser beräkning av alla transformeringar. Detta kallas för lat utvärdering eller lat inläsning, vilket gör att du kan länka flera åtgärder eftersom Spark hanterar deras körning på ett uppskjutet sätt, i stället för att omedelbart köra dem när de definieras.
Kommentar
Lat utvärdering innebär att DataFrames lagrar logiska frågor som en uppsättning instruktioner (set) mot en datakälla i stället för ett resultat i minnet. Detta varierar drastiskt från ivrig körning, vilket är den modell som används av Pandas DataFrames.
Åtgärder: Åtgärder instruerar Spark att beräkna ett resultat från en serie transformeringar på en eller flera DataFrames. Åtgärdsåtgärder returnerar ett värde och kan vara något av följande:
- Åtgärder för att mata ut data i konsolen eller redigeraren, till exempel
display
ellershow
- Åtgärder för att samla in data (returnerar
Row
objekt), till exempeltake(n)
, ochfirst
ellerhead
- Åtgärder för att skriva till datakällor, till exempel
saveAsTable
- Sammansättningar som utlöser en beräkning, till exempel
count
Viktigt!
I produktionsdatapipelines är skrivning av data vanligtvis den enda åtgärd som ska finnas. Alla andra åtgärder avbryter frågeoptimeringen och kan leda till flaskhalsar.
Vad innebär det att DataFrames är oföränderliga?
DataFrames är en samling transformeringar och åtgärder som definieras mot en eller flera datakällor, men i slutändan löser Apache Spark frågor tillbaka till de ursprungliga datakällorna, så själva data ändras inte och inga DataFrames ändras. DataFrames är med andra ord oföränderliga. På grund av detta returneras en ny DataFrame efter att ha utfört transformeringar som måste sparas i en variabel för att få åtkomst till den i efterföljande åtgärder. Om du vill utvärdera ett mellanliggande steg i omvandlingen anropar du en åtgärd.
API:er och bibliotek
Precis som med alla API:er för Spark är PySpark utrustad med många API:er och bibliotek som möjliggör och stöder kraftfulla funktioner, inklusive:
- Bearbetning av strukturerade data med relationsfrågor med Spark SQL och DataFrames. Med Spark SQL kan du blanda SQL-frågor med Spark-program. Med Spark DataFrames kan du effektivt läsa, skriva, transformera och analysera data med Hjälp av Python och SQL, vilket innebär att du alltid använder den fulla kraften i Spark. Se PySpark Komma igång.
- Skalbar bearbetning av strömmar med strukturerad direktuppspelning. Du kan uttrycka din strömningsberäkning på samma sätt som du uttrycker en batchberäkning på statiska data och Spark SQL-motorn kör den stegvis och kontinuerligt när strömmande data fortsätter att tas emot. Se Översikt över strukturerad direktuppspelning.
- Pandas-datastrukturer och dataanalysverktyg som fungerar på Apache Spark med Pandas API på Spark. Med Pandas API på Spark kan du skala din Pandas-arbetsbelastning till valfri storlek genom att köra den distribuerad över flera noder, med en enda kodbas som fungerar med Pandas (tester, mindre datamängder) och med Spark (produktion, distribuerade datamängder). Se Översikt över Pandas API på Spark.
- Maskininlärningsalgoritmer med Machine Learning (MLLib). MLlib är ett skalbart maskininlärningsbibliotek som bygger på Spark och som ger en enhetlig set API:er som hjälper användarna att skapa och finjustera praktiska maskininlärningspipelines. Se Översikt över Maskininlärningsbibliotek.
- Grafer och grafparallell beräkning med GraphX. GraphX introducerar en ny riktad multigraf med egenskaper kopplade till varje hörn och kant och exponerar grafberäkningsoperatorer, algoritmer och byggare för att förenkla diagramanalysuppgifter. Se Översikt över GraphX.
Spark-självstudier
Exempel på PySpark-användning i Databricks finns i följande artiklar:
Apache Spark-dokumentationen innehåller även snabbstarter och guider för att lära dig Spark, inklusive följande:
- Snabbstart för PySpark DataFrames
- Spark SQL Komma igång
- Programmeringsguide för strukturerad direktuppspelning
- Snabbstart för Pandas API på Spark
- Programmeringsguide för Machine Learning-bibliotek
PySpark-referens
Azure Databricks har en egen version av PySpark-API:erna och motsvarande referens, som finns i följande avsnitt: