Dela via


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 i select 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 eller show
  • Åtgärder för att samla in data (returnerar Row objekt), till exempel take(n), och first eller head
  • Å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:

PySpark-referens

Azure Databricks har en egen version av PySpark-API:erna och motsvarande referens, som finns i följande avsnitt: