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 namngivna kolumner. Du kan tänka dig en DataFrame som ett kalkylblad eller en SQL-tabell, en tvådimensionell datastruktur med etiketter för en serie poster (liknar rader i en tabell) och kolumner av olika typer. DataFrames tillhandahåller en omfattande uppsättning funktioner (till exempel välja kolumner, filtrera, koppla och aggregera) som gör att du kan utföra vanliga datamanipulerings- och analysuppgifter effektivt.
Några viktiga DataFrame-element är:
- Schema: Ett schema definierar kolumnnamnen och typerna för en DataFrame. Dataformat har olika semantik för schemadefinition och tillämpning. Vissa datakällor tillhandahåller schemainformation, medan andra antingen förlitar sig på manuell schemadefinition eller tillåter schemainferens. 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 kolumner för att lagra data, för optimering cachelagrar Spark och blandar data med hjälp av rader. - Kolumner: Kolumner i Spark liknar kolumner 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 väljer, manipulerar eller tar bort kolumner från en datakälla. Möjliga datakällor är tabeller, vyer, filer eller andra DataFrames. Kolumner tas aldrig bort från en datauppsättning eller en DataFrame. De utelämnas bara från resultat genom
.drop
transformeringar eller utelämnanden iselect
instruktioner.
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 mot en datakälla i stället för ett minnesinternt resultat. 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 Komma igång med PySpark.
- 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 Mašinsko učenje (MLLib). MLlib är ett skalbart maskininlärningsbibliotek som bygger på Spark och som tillhandahåller en enhetlig uppsättning API:er som hjälper användarna att skapa och finjustera praktiska maskininlärningspipelines. Se översikt över Mašinsko učenje-bibliotek.
- 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
- Komma igång med Spark SQL
- Programmeringsguide för strukturerad direktuppspelning
- Snabbstart för Pandas API på Spark
- programmeringsguide för Mašinsko učenje-bibliotek
PySpark-referens
Azure Databricks har en egen version av PySpark-API:erna och motsvarande referens, som finns i följande avsnitt: