Introductie tot PySpark in Python: korte handleiding (2024)
Inleiding
Wat is PySpark en Waarom Het te Gebruiken
PySpark is de Python API voor Apache Spark, een open-source, gedistribueerd computingssysteem dat een snel en veelzijdig clustercomputing-framework biedt. Spark is ontstaan vanuit de behoefte om verwerkingsprocessen in Hadoop-clusters te versnellen, maar heeft zijn voorloper voorbijgestreefd door een uitgebreid en uniform framework aan te bieden voor het beheren van verschillende dataverwerkingstaken.
Ik gebruik voornamelijk PySpark vanwege zijn vermogen om grote datasets soepel te verwerken. Met de enorme hoeveelheid data in deze tijd, is het verwerken van grote datasets met traditionele methoden niet alleen traag; het is onpraktisch. PySpark verdeelt een berekeningsproces over meerdere knooppunten, waardoor parallelle verwerking wordt benut die taken aanzienlijk versnelt.
Een andere reden waarom ik graag met PySpark werk, is vanwege de compatibiliteit met Python, de taal bij uitstek voor de meeste datawetenschappers. Hierdoor kan ik PySpark eenvoudig integreren in een machine learning of data-analyse pipeline zonder de Python-ecosysteem te verlaten. Bovendien staat Python bekend om zijn eenvoud en leesbaarheid, wat het werken met een complex systeem als Spark veel toegankelijker maakt voor beginners.
from pyspark.sql import SparkSession
# Initialiseer een Spark sessie
spark = SparkSession.builder \
.appName("Introductie tot PySpark") \
.getOrCreate()
# We kunnen nu 'spark' gebruiken om verschillende dataverkrijgingen uit te voeren
In de wereld van big data is veerkracht cruciaal. De Resilient Distributed Datasets (RDD's) van PySpark zijn een doorbraak omdat ze fouttolerant zijn en data automatisch kunnen herstellen na een storing. Met PySpark heb ik de zekerheid dat de integriteit van mijn berekeningen of dataverwerkingstaken intact blijft, zelfs bij onvermijdelijke systeemstoringen.
# Een RDD maken met PySpark
data = [1, 2, 3, 4, 5]
rdd = spark.sparkContext.parallelize(data)
# Voer een eenvoudige bewerking uit - neem het eerste element van de RDD
print(rdd.take(1))
PySpark blinkt uit in zijn vermogen om streaming gegevens in real-time te verwerken. Naarmate ik steeds meer met live data werk—of het nu gaat om social media feeds, IoT-apparaten of financiële transacties—stelt de structured streaming module van PySpark me in staat om bijna direct inzichten te krijgen. Ik kan eenvoudig een streaming DataFrame maken en transformaties toepassen terwijl de data stroomt, waardoor het mogelijk is om complexe analyses in real-time uit te voeren.
# Een stream lezen in PySpark
streaming_df = spark \
.readStream \
.format("socket") \
.option("host", "localhost") \
.option("port", 12345) \
.load()
# Is de stream gereed?
streaming_df.isStreaming
Laatst heeft PySpark een sterke community support en een levendig ecosysteem, wat betekent dat ik vaak tools, bibliotheken en ondersteuning vind die mijn ontwikkelervaring verbeteren. Of het nu gaat om integratie met veelgebruikte gegevensbronnen, SQL-databases of zelfs machine learning-bibliotheken, het ecosysteem van PySpark biedt alles wat je nodig hebt.
Voor beginners kan PySpark overweldigend zijn met zijn vele functies en schaalbaarheidsopties. Maar door de basis onder de knie te krijgen—het begrijpen van RDD's, DataFrames en basis transformaties—kun je snel de kracht en flexibiliteit waarderen die het biedt voor dataverwerkingstaken.
Om te beginnen met het benutten van de kracht van gedistribueerde computing in Python, heb je een basiskennis van Python-programmering nodig, een inzicht in big data-concepten en enige bereidheid om aanvankelijke uitdagingen aan te gaan. Maar zodra je het eenmaal doorhebt, zul je waarschijnlijk merken dat een investering in het leren van PySpark de moeite meer dan waard is, omdat het data-driven workflows en analytics aanzienlijk kan versnellen.
PySpark op je computer instellen
PySpark op je eigen computer installeren is eigenlijk niet zo moeilijk als het klinkt, en ik ga je er stap voor stap doorheen loodsen. Zie het als het opzetten van een klein laboratorium waar je met grote datasets kunt spelen, gewoon lekker thuis. We gaan ervan uit dat je al Python geïnstalleerd hebt, dus laten we beginnen.
Allereerst moet je ervoor zorgen dat Java 8 of hoger geïnstalleerd is, omdat PySpark op de Java Virtual Machine (JVM) draait. Je kunt je Java-versie controleren door een terminal te openen en het volgende in te typen:
java -version
Als je geen Java hebt, of een nieuwe versie nodig hebt, ga dan naar de officiële Oracle Java download pagina om jezelf te helpen.
Vervolgens moet je Spark installeren. Ga naar de Apache Spark downloadpagina, kies een Spark-versie (bij voorkeur de nieuwste stabiele) en een pakkettype, en download het .tgz-bestand. Als het gedownload is, pak je het uit met het volgende commando in je terminal:
tar -xvf spark-*.*.*-bin-hadoop*.tgz
Vervang de sterretjes door het versienummer dat je hebt gedownload. Dit geeft je een map, die ik meestal hernoem naar gewoon 'spark' voor het gemak.
Oké, Spark heeft een team gevormd met Java, maar ze hebben een bemiddelaar nodig om met Python te praten; daar komt PySpark in beeld. Py4J wordt standaard meegeleverd met PySpark, dus daar hoef je je geen zorgen over te maken.
Je installeert PySpark met behulp van pip, de pakketinstaller van Python. Als je het niet weet, pip wordt meegeleverd met Python, dus je zou het al moeten hebben. Om PySpark te installeren, open je je terminal en typ je:
pip install pyspark
Vrij eenvoudig, toch? Maar Spark heeft nog één ding nodig voordat het op jouw computer kan draaien: het moet weten waar het Java en Python kan vinden. Dit betekent dat je enkele omgevingsvariabelen moet instellen. Dit kan een beetje ingewikkeld aanvoelen als je er niet aan gewend bent, maar het is gewoon een kwestie van je computer vertellen waar het de benodigdheden kan vinden.
Voeg deze regels toe aan je ~/.bash_profile
, ~/.bashrc
, of zelfs ~/.zshrc
afhankelijk van welke schil je gebruikt. Als je Windows gebruikt, moet je deze als systeemomgevingsvariabelen toevoegen:
export JAVA_HOME=`/usr/libexec/java_home`
export SPARK_HOME=~/spark
export PATH=$PATH:$SPARK_HOME/bin
export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH
Na het bijwerken van je omgevingsvariabelen, vergeet niet je profiel te herladen met
source ~/.bash_profile
(pas dit weer aan naar je schil of systeem.)
Om te testen of alles goed werkt, open je een nieuw terminalvenster en typ je:
pyspark
Als je een welkomstbericht van Spark ziet, is het gelukt, en tijd om te vieren! Je zou nu tegen de Spark-versie van een Python-prompt aan moeten kijken.
Daar heb je het: je lokale computer is nu een mini dataverwerkingsfabriek. Voel je vrij om met de functies van Spark te spelen om een idee te krijgen van zijn kracht. Als je ergens tegenaan loopt, zijn de Apache Spark gebruikersmailinglijst en Stack Overflow uitstekende plekken om vragen te stellen. Met PySpark goed ingesteld ben je helemaal klaar om je eerste Spark-applicatie te bouwen – wat we in het volgende deel zullen verkennen.
Kernconcepten van PySpark-bewerkingen
Zoals ik heb ontdekt, als je eenmaal de eerste installatie van PySpark op je computer achter de rug hebt en je je eerste applicatie draaiende hebt, is het tijd om je iets vertrouwder te maken met de kernoperaties. Dit zijn de tools die je dagelijks zult gebruiken om gegevens op grote schaal te beheren met PySpark.
Ten eerste is het begrijpen van Resilient Distributed Datasets (RDDs) belangrijk. RDDs vormen de basis van PySpark. Ze zijn een foutbestendig verzameling elementen die je parallel kunt bewerken. Je kunt een RDD maken door een bestaande verzameling in je driverprogramma te paralleliseren, of door een dataset in een extern opslagsysteem aan te roepen.
from pyspark import SparkContext
sc = SparkContext()
# Parallelle verzamelingen
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)
# Externe dataset
distFile = sc.textFile("data.txt")
Daarna zijn transformaties een belangrijk concept. Dit zijn kernoperaties die een nieuwe RDD creëren vanuit een bestaande. Voorbeelden zijn map, filter en reduceByKey. Let op, transformaties zijn lui. Ze berekenen hun resultaten niet meteen. Ze onthouden alleen de transformatie die op een basisdataset is toegepast.
# Map transformatie
rdd = sc.parallelize([1, 2, 3, 4])
squaredRDD = rdd.map(lambda x: x*x)
# Filter transformatie
filteredRDD = rdd.filter(lambda x: x % 2 == 0)
Acties, daarentegen, zijn operaties die een waarde terugsturen naar het driverprogramma na een berekening op de dataset. Een veelgebruikte actie is collect, waarmee de hele RDD naar het driverprogramma wordt gehaald.
# Collect actie
result = squaredRDD.collect()
print(result) # Output: [1, 4, 9, 16]
DataFrames , een concept afgeleid van pandas DataFrames, zijn ook essentieel voor PySpark. Ze bieden een hoger niveau van abstractie en worden onder de motorkap geoptimaliseerd door de Catalyst optimizer van Spark. Het maken van een DataFrame is net zo eenvoudig als het converteren van een RDD of het lezen van een bestand.
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("voorbeeldApp").getOrCreate()
# DataFrame maken van RDD
df = spark.createDataFrame(rdd.map(lambda x: (x, x*x)), ["nummer", "vierkant"])
# Een DataFrame lezen vanuit een bestand
df = spark.read.json("examples/src/main/resources/people.json")
Een andere monumentale operatie is de DataFrame transformatie waarbij je operaties zoals select, filter, groupBy en orderBy kunt gebruiken om je gegevens te verwerken en te verfijnen.
# Select operatie
df.select(df['name'], df['age'] + 1).show()
# GroupBy operatie
df.groupBy("age").count().show()
Deze operaties kunnen in het begin abstract lijken, maar door te oefenen worden ze vloeiende bewegingen die je zonder erbij na te denken uitvoert - net als het perfectioneren van een gitaarakkoord of een nieuwe taal. Maar, in tegenstelling tot gitaar snaren die soms zoemen en talen die correcte grammatica verwachten, is PySpark vergevingsgezinder. Het staat te popelen om gigantische datasets te verwerken op jouw codeopdrachten, en eerlijk gezegd, dat is best spannend.
Elke regel code die je schrijft brengt je dichter bij het beheersen van gegevensmanipulatie en analyse op schaal. Hoewel ik niet kan garanderen dat het makkelijk zal zijn, kan ik je verzekeren dat het een heerlijke voldoening geeft als je PySpark applicaties exact doen wat jij wilt.
Onthoud, hoe meer je speelt met deze concepten - RDDs, transformaties, acties en DataFrames - hoe intuïtiever ze worden. Dus blijf experimenteren, blijf ontdekken, en voor je het weet voelt PySpark als een natuurlijke uitbreiding van je gegevensverwerkingsgeest.
Je Eerste PySpark-Applicatie Bouwen
Oke, dus je hebt nu een goed idee van het wat, het waarom en hoe je PySpark opzet. Laten we nu praktisch aan de slag gaan met het bouwen van een eenvoudige PyShop-applicatie vanaf nul. We gaan een simpele app maken die wat data inleest, verwerkt en resultaten oplevert. Dit geeft je een gevoel voor de echte kracht van PySpark.
Allereerst, zorg dat je SparkSession klaar staat. Zoals je misschien nog weet van eerder, beginnen we met:
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("MijnEerstePySparkApp") \
.getOrCreate()
Oke, de SparkSession is ingesteld. Laten we wat data laden. Vaak gebruik ik JSON omdat het zo overal gebruikt wordt, maar onthoud dat PySpark veel verschillende formaten aankan.
df = spark.read.json("pad_naar_je_data.json")
Geweldig, we hebben data! Meestal kijk ik even in de dataset om te checken of alles er goed uitziet. Een simpele actie als show()
kan heel verhelderend zijn.
df.show()
Stel, onze JSON bestanden bevatten volop gebruikersreacties van een website, en je wilt tellen hoeveel reacties elke gebruiker heeft geplaatst. We moeten dan groeperen per gebruiker en de entries tellen. Hier is hoe je dat doet:
from pyspark.sql.functions import col
comment_counts = df.groupBy("user").count()
comment_counts.show()
Deze code zou ons een mooie samenvatting moeten laten zien. Maar misschien wil ik de ruis eruit filteren en me focussen op actieve gebruikers — laten we zeggen die met meer dan vijf reacties.
active_users = comment_counts.filter(col("count") 5)
active_users.show()
Zie je de col
functie? Het is eigenlijk een handige manier om een kolom in een DataFrame in PySpark te specificeren. Handig, toch?
Ik sla mijn resultaten meestal op om ze later te bekijken of misschien met een teamgenoot te delen. Gelukkig maakt PySpark dat eenvoudig.
active_users.write.csv("pad_om_resultaten_op_te_slaan.csv")
En voilà, we hebben een eenvoudige applicatie gebouwd die data leest, verwerkt en output levert met PySpark.
Nu lijken deze operaties misschien simpel, maar stel je voor dat je dit opschaalt naar miljarden records. Dat is waar PySpark uitblinkt. Het maakt gebruik van de distributieve computermacht van Spark, zodat je wat ik zojuist liet zien kunt doen over enorme datasets.
Ik heb geprobeerd de code fragmenten duidelijk en doelgericht te houden omdat ik me herinner hoe ik me voelde toen ik begon. De syntax kan ontmoedigend zijn, maar zodra je het doorhebt, voelt elke regel code als een overwinning — alsof je een krachtige data-verwerkingsbeest met een paar toetsenaanslagen aanstuurt.
Voor iedereen die serieus zijn PySpark vaardigheden wil aanscherpen, is de officiële Apache Spark documentatie een goudmijn (Spark Documentatie). Bovendien, onderschat de schat aan kennis niet die beschikbaar is in repositories op GitHub (awesome-spark). Ze zijn een geweldige manier om te zien hoe anderen problemen aanpakken en kunnen je eigen oplossingen inspireren.
Onthoud, dit is slechts het begin. Met PySpark heb je de tools om data op manieren aan te pakken die je nooit voor mogelijk had gehouden. En met de community en hulpmiddelen die er zijn, is hulp nooit ver weg. Blijf experimenteren, blijf leren, en je zult in een mum van tijd meester zijn van PySpark apps. Veel programmeerplezier!
Delen