Exxact/Dyp Læring, Hpc, Av, Distribusjon og Mer

Hva Er Apache Spark?

Apache Spark er en av de hotteste nye trendene i teknologidomenet. Det er rammen med sannsynligvis det høyeste potensialet for å realisere frukten av ekteskapet mellom Big Data og Maskinlæring.den kjører raskt (opptil 100x raskere enn tradisjonell Hadoop MapReduce på grunn av in-memory operasjon, tilbyr robuste, distribuerte, feiltolerante dataobjekter (kalt RDD), og integrerer vakkert med verden av maskinlæring og grafanalyse gjennom tilleggspakker som Mlib og GraphX.

The-Benefits-Examples-of-Using-Apache-Spark-with-PySpark-in-Python-Apache-Spark-288x300.Spark er implementert På Hadoop / HDFS og skrevet hovedsakelig I Scala, et funksjonelt programmeringsspråk som Ligner På Java. Faktisk Trenger Scala den nyeste Java-installasjonen på systemet ditt og kjører PÅ JVM. Men For de fleste nybegynnere Er Scala ikke et språk som de lærer først å våge seg inn i datavitenskapens verden. Heldigvis Gir Spark en fantastisk Python-integrasjon, Kalt PySpark, som lar Python-programmerere grensesnitt Med Spark framework og lære å manipulere data i skala og jobbe med objekter og algoritmer over et distribuert filsystem.

i denne artikkelen vil vi lære grunnleggende Om PySpark. Det er mange konsepter (stadig utvikling og introdusert), og derfor fokuserer vi bare på grunnleggende med noen få enkle eksempler. Leserne oppfordres til å bygge videre på disse og utforske mer på egen hånd.

Den Korte Historien Om Apache Spark

Apache Spark startet som et forskningsprosjekt VED Uc Berkeley AMPLab i 2009 og ble åpen kildekode tidlig i 2010. Det var et klasseprosjekt VED Uc Berkeley. Ideen var å bygge et cluster management framework, som kan støtte ulike typer cluster datasystemer. Mange av ideene bak systemet ble presentert i ulike forskningsartikler gjennom årene. Etter å ha blitt utgitt, Vokste Spark til et bredt utviklersamfunn og flyttet Til Apache Software Foundation i 2013. I dag er prosjektet utviklet i samarbeid av et fellesskap av hundrevis av utviklere fra hundrevis av organisasjoner.

Spark er Ikke Et Programmeringsspråk

En ting å huske er At Spark ikke er et programmeringsspråk som Python eller Java. Det er en generell distribuert databehandlingsmotor, egnet for bruk i et bredt spekter av omstendigheter. Det er spesielt nyttig for stor databehandling både i skala og i høy hastighet.Applikasjonsutviklere og datavitenskapere innlemmer Generelt Spark i sine applikasjoner for raskt å spørre, analysere og transformere data i stor skala. Noen av oppgavene Som oftest er knyttet Til Spark inkluderer, – etl – og SQL – batchjobber på tvers av store datasett (ofte av terabyte av størrelse),-behandling av streamingdata fra iot-enheter og noder, data fra ulike sensorer, økonomiske og transaksjonssystemer av alle slag, og-maskinlæringsoppgaver for e-handel eller IT-applikasjoner.I Kjernen bygger Spark på Toppen Av Hadoop / HDFS-rammeverket for håndtering av distribuerte filer. Det er for det meste implementert Med Scala, en funksjonell språkvariant Av Java. Det er en Kjerne Gnistdatabehandlingsmotor, men på toppen av det er det mange biblioteker utviklet for SQL-type spørringsanalyse, distribuert maskinlæring, storskala grafberegning og streaming databehandling. Flere programmeringsspråk støttes Av Spark i form av enkle grensesnittbiblioteker: Java, Python, Scala Og R.

Spark Bruker MapReduce Paradigme For Distribuert Behandling

den grunnleggende ideen om distribuert behandling er å dele data biter i små håndterbare biter (inkludert noen filtrering og sortering), bringe beregningen nær dataene dvs.ved hjelp av små noder av en stor klynge for bestemte jobber og deretter re-kombinere dem tilbake. Delingsdelen kalles ‘Kart’ – handlingen og rekombinasjonen kalles ‘Reduser’ – handlingen. Sammen lager De det berømte ‘MapReduce’ paradigmet, som Ble introdusert Av Google rundt 2004(se originalpapiret her).

hvis en fil for eksempel har 100 poster som skal behandles, kan 100 mapper kjøre sammen for å behandle en post hver. Eller kanskje 50 mappers kan kjøre sammen for å behandle to poster hver. Etter at alle mapperne har fullført behandlingen, blander rammen og sorterer resultatene før de overføres til reduksjonsmidlene. En redusering kan ikke starte mens en mapper fortsatt pågår. Alle utdataverdiene for kart som har samme nøkkel, tilordnes en enkelt reduksjon, som deretter samler verdiene for den nøkkelen.

PE_TITAN-RTX-Blogg-1024x127.jpg

Hvordan Sette Opp PySpark

hvis du allerede er kjent med Python og biblioteker som Pandas og Numpy, Så PySpark er en stor utvidelse/rammeverk for å lære for å skape mer skalerbare, dataintensive analyser og rørledninger ved å utnytte kraften I Spark i bakgrunnen.

den nøyaktige prosessen med å installere Og sette Opp PySpark miljø (på en frittstående maskin) er noe involvert og kan variere noe avhengig av system og miljø. Målet er å få din vanlige Jupyter data science miljø arbeider Med Spark i bakgrunnen ved hjelp Av PySpark pakken.

Denne artikkelen på Medium gir flere detaljer om den trinnvise installasjonsprosessen.

The-Benefits-Examples-of-Using-Apache-Spark-with-PySpark-in-Python-Apache-Spark-Setup.png

Alternativt kan Du bruke Databricks oppsett for å praktisere Spark. Dette selskapet ble opprettet av De opprinnelige skaperne Av Spark og har et utmerket klar-til-lansering miljø for å gjøre distribuert analyse med Spark.

men ideen er alltid den samme. Du distribuerer (og replikerer) ditt store datasett i små faste biter over mange noder. Du tar deretter databehandlingsmotoren nær dem slik at hele operasjonen er parallellisert, feiltolerant og skalerbar.Ved å jobbe med PySpark og Jupyter notebook, kan du lære alle disse konseptene uten å bruke noe på AWS eller Databricks plattform. Du kan også enkelt grensesnitt Med SparkSQL og MLlib for database manipulasjon og maskinlæring. Det vil være mye lettere å begynne å jobbe med virkelige store klynger hvis du har internalisert disse konseptene på forhånd!

Resilient Distributed Dataset (Rdd) Og SparkContext

Mange Spark-programmer dreier seg om konseptet om et resilient distributed dataset (RDD), som er en feiltolerant samling av elementer som kan betjenes parallelt. SparkContext ligger I Driverprogrammet og administrerer distribuerte data over arbeidernodene gjennom klyngebehandling. Den gode tingen om Å bruke PySpark er at all denne kompleksiteten av datapartisjonering og oppgavebehandling håndteres automatisk på baksiden, og programmereren kan fokusere på den spesifikke analysen eller maskinlæringsjobben selv.

Fordelene-Eksempler-Av-Bruk-Apache-Spark-med-PySpark-I-Python-Rdd-1.png

rdd-1

det er to måter å opprette RDDs på–parallellisering av en eksisterende samling i driverprogrammet ditt eller henvisning til et datasett i et eksternt lagringssystem, for eksempel et delt filsystem, HDFS, HBase eller en hvilken som helst datakilde som tilbyr En Hadoop – InputFormat.

for illustrasjon med En Python-basert tilnærming, vil vi gi eksempler på den første typen her. Vi kan lage en enkel Python rekke 20 tilfeldige heltall (mellom 0 og 10), ved Hjelp Av numpy random.randint (), og opprett deretter ET RDD-objekt som følger,

from pyspark import SparkContextimport numpy as npsc=SparkContext(master="local")lst=np.random.randint(0,10,20)A=sc.parallelize(lst)

Merk «4» i argumentet. Det betegner 4 datakjerner (i din lokale maskin) som skal brukes til Dette SparkContext-objektet. Hvis vi sjekker TYPEN AV rdd-objektet, får vi følgende,

type(A)>> pyspark.rdd.RDD

Motsatt parallellisering er samlingen (med collect()) som bringer alle distribuerte elementer og returnerer dem til hodeknuten.

A.collect()>> 

Men A er ikke lenger en enkel Numpy array. Vi kan bruke glom () – metoden for å sjekke hvordan partisjonene er opprettet.

A.glom().collect()>> , , , ]

stopp NÅ SC og initialiser den med 2 kjerner og se hva som skjer når du gjentar prosessen.

sc.stop()sc=SparkContext(master="local")A = sc.parallelize(lst)A.glom().collect()>> , ]

RDD er nå fordelt over to biter, ikke fire!

Du har lært om det første trinnet i distribuert dataanalyse, dvs. kontrollere hvordan dataene dine er delt over mindre biter for videre behandling

Noen Eksempler På Grunnleggende Operasjoner med RDD & PySpark

>> 20

det første elementet (første) og de første elementene (ta)

A.first()>> 4A.take(3)>> 

fjerne duplikater med å bruke distinkt

merk: Denne Operasjonen Krever En Shuffle For Å OPPDAGE duplisering på tvers av partisjoner. Så det er en langsom operasjon. Ikke overdriv det.

A_distinct=A.distinct()A_distinct.collect()>> 

alle elementene bruker reduksjonsmetoden

Merk bruken av en lambda-funksjon i dette,

A.reduce(lambda x,y:x+y)>> 80

eller direkte sum () – metoden

A.sum()>> 80

finne maksimalt element ved å redusere

A.reduce(lambda x,y: x if x > y else y)>> 9

finne det lengste ordet I en tekstblokk

words = 'These are some of the best Macintosh computers ever'.split(' ')wordRDD = sc.parallelize(words)wordRDD.reduce(lambda w,v: w if len(w)>len(v) else v)>> 'computers'

bruk filteret for logikkbasert filtrering

# Return RDD with elements (greater than zero) divisible by 3A.filter(lambda x:x%3==0 and x!=0).collect()>> 

skriv vanlige python-funksjoner som skal brukes med reduser()

def largerThan(x,y): """ Returns the last word among the longest words in a list """ if len(x)> len(y): return x elif len(y) > len(x): return y else: if x < y: return x else: return ywordRDD.reduce(largerThan)>> 'Macintosh'

merk her x < y gjør en leksikografisk sammenligning og bestemmer At Macintosh er større enn datamaskiner!

Kartlegging med en lambda-funksjon med PySpark

B=A.map(lambda x:x*x)B.collect()>> 

Kartlegging med en vanlig Python-funksjon i PySpark

def square_if_odd(x): """ Squares if odd, otherwise keeps the argument unchanged """ if x%2==1: return x*x else: return xA.map(square_if_odd).collect()>> 

groupby returnerer EN RDD av grupperte elementer (iterable) som per en gitt gruppeoperasjon

I følgende eksempel bruker vi en listeforståelse Sammen med gruppen for å lage en liste over to elementer, Hver Med en overskrift (resultatet av lambda-funksjonen, enkel modulo 2 her), og en sortert liste Over elementene Som ga opphav Til det resultatet. Du kan enkelt forestille deg at denne typen separasjon kan komme spesielt nyttig for behandling av data som må bindes/hermetisert ut basert på bestemt operasjon utført over dem.

result=A.groupBy(lambda x:x%2).collect()sorted()>> ), (1, )]

ved hjelp av histogram

histogram () – metoden tar en liste over skuffer/skuffer og returnerer en tuple med resultatet av histogrammet (binning),

B.histogram()>> (, )

Angi operasjoner

du kan også gjøre vanlige settoperasjoner på RDDs som-union(), skjæringspunkt(), trekke fra () eller kartesisk().

Sjekk ut Denne Jupyter notisboken for flere eksempler.

Dyp Læring Ebok Nedlasting

Lazy evaluering med PySpark (Og Caching)

Lazy evaluering er en evaluering/beregning strategi som forbereder en detaljert steg-for-steg interne kart over gjennomføring rørledningen for en databehandling oppgave, men forsinker den endelige utførelsen til når det er absolutt nødvendig. Denne strategien er Kjernen I Spark for å øke hastigheten på mange parallelliserte big Data-operasjoner.

La oss bruke to CPU – kjerner for dette eksemplet,

sc = SparkContext(master="local")

Lag EN RDD med 1 million elementer

%%timerdd1 = sc.parallelize(range(1000000))>> CPU times: user 316 µs, sys: 5.13 ms, total: 5.45 ms, Wall time: 24.6 ms

noen databehandlingsfunksjon-taketime

from math import cosdef taketime(x): return cos(x)

Sjekk hvor mye tid er tatt av taketime-funksjonen

%%timetaketime(2)>> CPU times: user 21 µs, sys: 7 µs, total: 28 µs, Wall time: 31.5 µs>> -0.4161468365471424

husk dette resultatet, taketime () – funksjonen TOK en veggtid på 31.5 us. Selvfølgelig vil det nøyaktige nummeret avhenge av maskinen du jobber med.

gjør nå kartoperasjonen på funksjonen

%%timeinterim = rdd1.map(lambda x: taketime(x))>> CPU times: user 23 µs, sys: 8 µs, total: 31 µs, Wall time: 34.8 µs

hvordan kommer hver taketime-funksjon 45.8 oss men kartoperasjonen med en 1 million elementer RDD tok også en lignende tid?På grunn av lat evaluering, dvs. ingenting ble beregnet i forrige trinn, bare en plan for utførelse ble gjort. Den variable interim peker ikke på en datastruktur, i stedet peker den på en plan for utførelse, uttrykt som en avhengighetsgraf. Avhengighetsgrafen definerer hvordan Rdder beregnes fra hverandre.

den faktiske utførelsen ved å redusere metoden

%%timeprint('output =',interim.reduce(lambda x,y:x+y))>> output = -0.28870546796843666>> CPU times: user 11.6 ms, sys: 5.56 ms, total: 17.2 ms, Wall time: 15.6 s

så er veggtiden her 15,6 sekunder. Husk at taketime () – funksjonen hadde en veggtid på 31.5 us? Derfor forventer vi at den totale tiden skal være i størrelsesorden ~ 31 sekunder for en 1 million array. På grunn av parallell drift på to kjerner tok det ~ 15 sekunder.

Nå har vi ikke lagret (materialisert) noen mellomliggende resultater i mellomtiden, så en annen enkel operasjon (f. eks.

%%timeprint(interim.filter(lambda x:x>0).count())>> 500000>> CPU times: user 10.6 ms, sys: 8.55 ms, total: 19.2 ms, Wall time: 12.1 s

Caching for å redusere beregningstiden på lignende operasjon (utgifter minne)

Husk avhengighetsgrafen som vi bygget i forrige trinn? Vi kan kjøre samme beregning som før med cache-metoden for å fortelle avhengighetsgrafen å planlegge for caching.

%%timeinterim = rdd1.map(lambda x: taketime(x)).cache()

den første beregningen vil ikke bli bedre, men den bufrer det foreløpige resultatet,

%%timeprint('output =',interim.reduce(lambda x,y:x+y))>> output = -0.28870546796843666>> CPU times: user 16.4 ms, sys: 2.24 ms, total: 18.7 ms, Wall time: 15.3 s

kjør nå samme filtermetode Ved hjelp av bufret resultat,

%%timeprint(interim.filter(lambda x:x>0).count())>> 500000>> CPU times: user 14.2 ms, sys: 3.27 ms, total: 17.4 ms, Wall time: 811 ms

Wow! Beregningstiden kom ned til mindre enn et sekund fra 12 sekunder tidligere! Denne måten, caching og parallellisering med lat utførelse, er kjernen funksjon i programmering Med Spark.

Dataframe og SparkSQL

Bortsett FRA RDD, Er Den andre viktige datastrukturen I Spark framework DataFrame. Hvis Du har gjort arbeid med Python Pandas eller R DataFrame, kan konseptet virke kjent.

En DataFrame er en distribuert samling av rader under navngitte kolonner. Det er konseptuelt ekvivalent med et bord i en relasjonsdatabase, Et Excel-ark med Kolonneoverskrifter eller en dataramme I R/Python, men med rikere optimaliseringer under hetten. DataFrames kan bygges fra en rekke kilder som strukturerte datafiler, tabeller I Hive, eksterne databaser, eller eksisterende RDDs. Den deler også noen felles egenskaper MED RDD: Uforanderlig i naturen: Vi kan lage DataFrame / RDD en gang, Men kan ikke endre den. Og vi kan transformere En DataFrame / RDD etter å ha brukt transformasjoner.

  • Late Evalueringer: dette betyr at en oppgave ikke utføres før en handling er utført. Distribuert: RDD og DataFrame begge er distribuert i naturen.
  • The-Benefits-Examples-of-Using-Apache-Spark-with-PySpark-in-Python-DataFrame-in-PySpark.png

    Fordeler Med DataFrame

    • DataFrames er designet for å behandle en stor samling strukturerte eller halvstrukturerte data.
    • Observasjoner I Spark DataFrame er organisert under navngitte kolonner, som hjelper Apache Spark til å forstå skjemaet For En DataFrame. Dette hjelper Spark med å optimalisere utførelsesplanen for disse spørringene.
    • DataFrame I Apache Spark har evnen til å håndtere petabyte med data.
    • DataFrame har støtte for et bredt spekter av dataformater og kilder.
    • DEN har API-støtte for forskjellige språk som Python, R, Scala, Java.

    dataframe grunnleggende eksempel

    for grunnleggende og typiske bruk eksempler På DataFrames, kan du se Følgende Jupyter Notatbøker,

    Spark DataFrame grunnleggende

    Spark DataFrame operasjoner

    SparkSQL Bidrar Til Å Bygge Bro Over Gapet For PySpark

    Relasjonsdatabutikker er enkle å bygge og spørring. Brukere og utviklere foretrekker ofte å skrive enkle å tolke, deklarative spørringer i et menneskelig lesbart språk som SQL. Men etter hvert som data begynner å øke i volum og variasjon, skalerer ikke den relasjonelle tilnærmingen godt nok til å bygge Store dataapplikasjoner og analytiske systemer.

    Vi har hatt suksess i domenet Til Big Data analytics Med Hadoop og MapReduce paradigmet. Dette var kraftig, men ofte sakte, og ga brukerne et lavt nivå, prosessorisk programmeringsgrensesnitt som krevde at folk skrev mye kode for selv svært enkle datatransformasjoner. Men Når Spark ble utgitt, revolusjonerte Det virkelig Måten Stor Dataanalyse ble gjort med fokus på in-memory computing, feiltoleranse, abstraksjoner på høyt nivå og brukervennlighet.Spark SQL prøver i hovedsak å bygge bro over gapet mellom de to modellene vi nevnte tidligere-relasjonelle og prosessuelle modeller. Spark SQL fungerer gjennom DataFrame API som kan utføre relasjonsoperasjoner på både eksterne datakilder og Sparks innebygde distribuerte samlinger-i stor skala!

    The-Benefits-Examples-of-Using-Apache-Spark-with-PySpark-in-Python-Spark-SQL-1024x489.hvorfor Er Spark SQL så rask og optimalisert? Årsaken er På grunn av En ny utvidbar optimizer, Catalyst, basert på funksjonelle programmeringskonstruksjoner I Scala. Catalyst støtter både regelbasert og kostnadsbasert optimalisering. Mens utvidbare optimalisatorer har blitt foreslått tidligere, har de vanligvis krevd et komplekst domenespesifikt språk for å spesifisere regler. Vanligvis fører dette til å ha en betydelig læringskurve og vedlikeholdsbyrde. I Motsetning Bruker Catalyst standardfunksjoner I scala-programmeringsspråket, for eksempel mønstermatching, for å la utviklere bruke hele programmeringsspråket samtidig som det gjør det enkelt å spesifisere regler.

    Du kan referere til Følgende Jupyter notatbok for en introduksjon Til Databaseoperasjoner Med SparkSQL:

    SparkSQL database operations basics

    Hvordan Skal Du Bruke PySpark I Prosjektet ditt?

    vi dekket grunnleggende Av Apache Spark økosystemet og hvordan det fungerer sammen med noen grunnleggende bruk eksempler på kjernedatastruktur RDD Med Python-grensesnittet PySpark. Også DataFrame og SparkSQL ble diskutert sammen med referanselenker for eksempel kode notatbøker.

    Det er så mye mer å lære og eksperimentere Med Apache Spark som brukes Med Python. PySpark-nettstedet er en god referanse å ha på radaren din, og de gjør regelmessige oppdateringer og forbedringer–så hold øye med det.

    og hvis du er interessert i å gjøre storskala, distribuert maskinlæring Med Apache Spark, så sjekk Ut MLLib-delen av PySpark-økosystemet.

    Likte Du Denne PySpark Bloggen? Pass På Å Sjekke Ut:

    • Privacy-Preserving Deep Learning – PySyft Versus TF-Encrypted

    Accelerate-your-AI.-1024x202.jpg

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *