logo

PySpark SQL

„Apache Spark“ yra sėkmingiausia „Apache Software Foundation“ programinė įranga, skirta greitam skaičiavimui. Kai kurios pramonės šakos naudoja „Apache Spark“, kad rastų savo sprendimus. PySpark SQL yra Spark modulis, kuris integruoja reliacinį apdorojimą su Spark funkcine programavimo API. Duomenis galime išgauti naudodami SQL užklausos kalbą. Galime naudoti tokias pat užklausas kaip ir SQL kalba.

Jei turite pagrindinį supratimą apie RDBVS, PySpark SQL bus lengva naudoti, kur galėsite išplėsti tradicinio reliacinio duomenų apdorojimo apribojimus. „Spark“ taip pat palaiko „Hive“ užklausų kalbą, tačiau „Hive“ duomenų bazėje yra apribojimų. Spark SQL buvo sukurta siekiant pašalinti Hive duomenų bazės trūkumus. Pažvelkime į šiuos „Hive“ trūkumus:

Avilio trūkumai

  • Jis negali tęsti apdorojimo, o tai reiškia, kad jei vykdymas nepavyksta darbo eigos viduryje, negalite tęsti nuo tos vietos, kurioje jis įstrigo.
  • Negalime išmesti užšifruotų duomenų bazių į pakopą, kai įjungta šiukšliadėžė. Tai veda prie vykdymo klaidos. Norėdami atsisakyti tokio tipo duomenų bazės, vartotojai turi naudoti parinktį Išvalyti.
  • Ad-hoc užklausos vykdomos naudojant „MapReduce“, kurią paleidžia „Hive“, tačiau kai analizuojame vidutinio dydžio duomenų bazę, našumas vėluoja.
  • „Hive“ nepalaiko atnaujinimo ar ištrynimo operacijos.
  • Jis apsiriboja antrinės užklausos palaikymu.

Dėl šių trūkumų reikia sukurti Apache SQL.

PySpark SQL trumpas įvadas

„PySpark“ palaiko integruotą reliacinį apdorojimą su „Spark“ funkciniu programavimu. Jis palaiko įvairius duomenų šaltinius, kad būtų galima susieti SQL užklausas su kodo transformacijomis, todėl gaunamas labai galingas įrankis.

PySpark SQL nustato ryšį tarp RDD ir reliacinės lentelės. Tai suteikia daug glaudesnę reliacinio ir procedūrinio apdorojimo integraciją per deklaratyviąją Dataframe API, kuri yra integruota su Spark kodu.

git komandos stumti

Naudojant SQL, jis gali būti lengvai pasiekiamas daugiau vartotojų ir pagerinti esamų optimizavimą. Jis taip pat palaiko platų duomenų šaltinių ir algoritmų spektrą „Big-data“.

PySpark SQL funkcija

PySpark SQL funkcijos pateiktos toliau:

1) Nuoseklus duomenų prieiga

Tai suteikia nuoseklią prieigą prie duomenų, tai reiškia, kad SQL palaiko bendrą būdą pasiekti įvairius duomenų šaltinius, pvz., „Hive“, „Avro“, „Parquet“, JSON ir JDBC. Tai atlieka svarbų vaidmenį pritaikant visus esamus vartotojus į Spark SQL.

2) Sujungimas su Spark

PySpark SQL užklausos yra integruotos su Spark programomis. Užklausas galime naudoti „Spark“ programose.

Vienas iš svarbiausių jos pranašumų yra tai, kad kūrėjams nereikia rankiniu būdu valdyti būsenos gedimų arba sinchronizuoti programos su paketinėmis užduotimis.

3) Standartinis ryšys

Jis suteikia ryšį per JDBC arba ODBC, o šie du yra verslo žvalgybos įrankių ryšio pramonės standartai.

4) Vartotojo nustatytos funkcijos

PySpark SQL turi kalbų kombinuotą vartotojo apibrėžtą funkciją (UDF). UDF naudojamas apibrėžti naują stulpelių funkciją, kuri praplečia Spark SQL DSL žodyną, skirtą DataFrame transformuoti.

k artimiausias kaimynas

5) Suderinamumas su aviliu

PySpark SQL vykdo nepakeistas „Hive“ užklausas dabartiniams duomenims. Tai leidžia visiškai suderinti su dabartiniais Hive duomenimis.

PySpark SQL modulis

Kai kurios svarbios „Spark SQL“ ir „DataFrames“ klasės yra šios:

    pyspark.sql.SparkSession:Tai yra pagrindinis įėjimo taškas DataFrame ir SQL funkcionalumą.pyspark.sql.DataFrame:Tai yra paskirstytas duomenų rinkinys, sugrupuotas į pavadintus stulpelius.pyspark.sql.Stulpelis:Tai reiškia stulpelio išraišką a DataFrame. pyspark.sql.Row:Tai reiškia duomenų eilutę a DataFrame. pyspark.sql.GroupedData:Sumavimo metodai, grąžino DataFrame.groupBy(). pyspark.sql.DataFrameNaFunctions:Tai reiškia trūkstamų duomenų tvarkymo metodus (nulines reikšmes).pyspark.sql.DataFrameStatFunctions:Tai rodo statistikos funkcionalumo metodus.pysark.sql.functions:Jame pateikiamas galimų integruotų funkcijų sąrašas DataFrame. pyspark.sql.types:Tai yra galimų duomenų tipų sąrašas.pyspark.sql.Window:Jis naudojamas darbui su lango funkcijomis.

Apsvarstykite šį PySpark SQL pavyzdį.

 import findspark findspark.init() import pyspark # only run after findspark.init() from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() df = spark.sql('''select 'spark' as hello ''') df.show() 

Išvestis:

 +-----+ |hello| +-----+ |spark| +-----+ 

Kodo paaiškinimas:

Aukščiau pateiktame kode mes importavome rasti kibirkštį modulį ir paskambino findspark.init() konstruktorius; tada importavome SparkSession modulį, kad sukurtume spark seansą.

kurtinys vs barsukas

iš pyspark.sql importuoti SparkSession

„Dataset“ ir „DataFrame“ API sukurti gali būti naudojama kibirkštinio seanso metu. „SparkSession“ taip pat gali būti naudojamas norint sukurti „DataFrame“, „DataFrame“ registruoti kaip lentelę, vykdyti SQL per lenteles, talpyklos lentelę ir skaityti parketo failą.

klasės statybininkas

Tai yra „Spark Session“ kūrėjas.

getOrCreate()

Jis naudojamas norint gauti esamą „SparkSession“, arba jei jo nėra, sukurkite naują pagal statybininko nustatytas parinktis.

Keletas kitų metodų

Toliau pateikiami keli PySpark SQL metodai:

1. Programos pavadinimas (pavadinimas)

Jis naudojamas norint nustatyti programos pavadinimą, kuris bus rodomas Spark žiniatinklio vartotojo sąsajoje. Parametras vardas priima parametro pavadinimą.

2. config(key = Nėra, reikšmė = Nėra, conf = Nėra)

Jis naudojamas konfigūracijos parinktims nustatyti. Šiuo metodu nustatytos parinktys automatiškai perduodamos abiem SparkConf ir SparkSession konfigūraciją.

 from pyspark.conf import SparkConfSparkSession.builder.config(conf=SparkConf()) 

Parametrai:

statinis raktinis žodis java
    Raktas-Konfigūracijos nuosavybės rakto pavadinimo eilutė.vertė-Tai reiškia konfigūracijos ypatybės vertę.conf -SparkConf pavyzdys.

3. meistras (meistras)

Jis nustato pagrindinį „Spark“ URL, prie kurio reikia prisijungti, pvz., „vietinis“, kad būtų paleistas vietoje, „vietinis[4]“, kad būtų paleistas lokaliai su 4 branduoliais.

Parametrai:

    meistras:kibirkšties meistro URL.

4. SparkSession.catalog

Tai sąsaja, kurią vartotojas gali sukurti, išmesti, keisti arba pateikti užklausą pagrindinėje duomenų bazėje, lentelėse, funkcijomis ir kt.

5. SparkSession.conf

string a int

Tai kibirkšties vykdymo konfigūracijos sąsaja. Tai sąsaja, per kurią vartotojas gali gauti ir nustatyti visas „Spark“ ir „Hadoop“ konfigūracijas, susijusias su „Spark SQL“.

klasės pyspark.sql.DataFrame

Tai paskirstytas duomenų rinkinys, sugrupuotas į pavadintus stulpelius. „DataFrame“ yra panašus į „Spark SQL“ reliacinę lentelę, kurią galima sukurti naudojant įvairias „SQLContext“ funkcijas.

 student = sqlContext.read.csv('...') 

Sukūrę duomenų rėmelį, galime juo manipuliuoti naudodami kelias konkrečiam domenui būdingas kalbas (DSL), kurios yra iš anksto nustatytos DataFrame funkcijos. Apsvarstykite toliau pateiktą pavyzdį.

 # To create DataFrame using SQLContext student = sqlContext.read.parquet('...') department = sqlContext.read.parquet('...') student.filter(marks > 55).join(department, student.student_Id == department.id)  .groupBy(student.name, 'gender').({'name': 'student_Id', 'mark': 'department'}) 

Panagrinėkime tokį pavyzdį:

Užklausa naudojant Spark SQL

Šiame kode pirmiausia sukuriame DataFrame ir vykdome SQL užklausas, kad gautume duomenis. Apsvarstykite šį kodą:

 from pyspark.sql import * #Create DataFrame songdf = spark.read.csv(r'C:UsersDEVANSH SHARMA	op50.csv', inferSchema = True, header = True) #Perform SQL queries songdf.select('Genre').show() songdf.filter(songdf['Genre']=='pop').show() 

Išvestis:

 +----------------+ | Genre| +----------------+ | canadian pop| | reggaeton flow| | dance pop| | pop| | dfw rap| | pop| | trap music| | pop| | country rap| | electropop| | reggaeton| | dance pop| | pop| | panamanian pop| |canadian hip hop| | dance pop| | latin| | dfw rap| |canadian hip hop| | escape room| +----------------+ only showing top 20 rows +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_c0| Track.Name| Artist.Name|Genre|Beats.Per.Minute|Energy|Danceability|Loudness..dB..|Liveness|Valence.|Length.|Acousticness..|Speechiness.|Popularity| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 6|I Don't Care (wit...| Ed Sheeran| pop| 102| 68| 80| -5| 9| 84| 220| 9| 4| 84| | 8| How Do You Sleep?| Sam Smith| pop| 111| 68| 48| -5| 8| 35| 202| 15| 9| 90| | 13| Someone You Loved|Lewis Capaldi| pop| 110| 41| 50| -6| 11| 45| 182| 75| 3| 88| | 38|Antisocial (with ...| Ed Sheeran| pop| 152| 82| 72| -5| 36| 91| 162| 13| 5| 87| | 44| Talk| Khalid| pop| 136| 40| 90| -9| 6| 35| 198| 5| 13| 84| | 50|Cross Me (feat. C...| Ed Sheeran| pop| 95| 79| 75| -6| 7| 61| 206| 21| 12| 82| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ 

Naudojant groupBy() funkciją

Funkcija groupBy() renka panašių kategorijų duomenis.

 songdf.groupBy('Genre').count().show() 

Išvestis:

 +----------------+-----+ | Genre|count| +----------------+-----+ | boy band| 1| | electropop| 2| | pop| 7| | brostep| 2| | big room| 1| | pop house| 1| | australian pop| 1| | edm| 3| | r&b en espanol| 1| | dance pop| 8| | reggaeton| 2| | canadian pop| 2| | trap music| 1| | escape room| 1| | reggaeton flow| 2| | panamanian pop| 2| | atl hip hop| 1| | country rap| 2| |canadian hip hop| 3| | dfw rap| 2| +----------------+-----+ 

paskirstymas (skaičiai, *stulpeliai)

The paskirstymas () grąžina naują DataFrame, kuri yra skaidymo išraiška. Ši funkcija priima du parametrus numparticijos ir *pl. The numparticijos parametras nurodo tikslinį stulpelių skaičių.

 song_spotify.repartition(10).rdd.getNumPartitions() data = song_spotify.union(song_spotify).repartition('Energy') data.show(5) 

Išvestis:

 +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_c0| Track.Name|Artist.Name| Genre|Beats.Per.Minute|Energy|Danceability|Loudness..dB..|Liveness|Valence.|Length.|Acousticness..|Speechiness.|Popularity| +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 5|Goodbyes (Feat. Y...|Post Malone|dfw rap| 150| 65| 58| -4| 11| 18| 175| 45| 7| 94| | 17| LA CANCI?N| J Balvin| latin| 176| 65| 75| -6| 11| 43| 243| 15| 32| 90| | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 5|Goodbyes (Feat. Y...|Post Malone|dfw rap| 150| 65| 58| -4| 11| 18| 175| 45| 7| 94| +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ only showing top 5 rows