Apache Spark on Apache Software Foundationin menestynein ohjelmisto, joka on suunniteltu nopeaan tietojenkäsittelyyn. Useat teollisuudenalat käyttävät Apache Sparkia ratkaisujensa löytämiseen. PySpark SQL on Sparkin moduuli, joka integroi relaatiokäsittelyn Sparkin toiminnalliseen ohjelmointirajapintaan. Voimme poimia tiedot käyttämällä SQL-kyselykieltä. Voimme käyttää samoja kyselyitä kuin SQL-kieltä.
Jos sinulla on perustiedot RDBMS:stä, PySpark SQL on helppokäyttöinen, jossa voit laajentaa perinteisen relaatiotietojen käsittelyn rajoituksia. Spark tukee myös Hive-kyselykieltä, mutta Hive-tietokannassa on rajoituksia. Spark SQL kehitettiin poistamaan Hive-tietokannan haitat. Katsotaanpa seuraavia Hiven haittoja:
Hiven haitat
- Se ei voi jatkaa käsittelyä, mikä tarkoittaa, että jos suoritus epäonnistuu työnkulun keskellä, et voi jatkaa siitä, mihin se juuttui.
- Emme voi pudottaa salattuja tietokantoja peräkkäin, kun roskakori on käytössä. Se johtaa suoritusvirheeseen. Pudottaakseen tällaisen tietokannan käyttäjien on käytettävä Purge-vaihtoehtoa.
- Ad-hoc-kyselyt suoritetaan MapReducella, jonka Hive käynnistää, mutta kun analysoimme keskikokoista tietokantaa, se viivästyttää suorituskykyä.
- Hive ei tue päivitys- tai poistotoimintoa.
- Se rajoittuu alikyselytukeen.
Nämä haitat ovat syitä kehittää Apache SQL.
PySpark SQL:n lyhyt esittely
PySpark tukee integroitua relaatiokäsittelyä Sparkin toiminnallisen ohjelmoinnin kanssa. Se tukee eri tietolähteitä mahdollistaen SQL-kyselyjen yhdistämisen koodimuunnoksilla, mikä on erittäin tehokas työkalu.
PySpark SQL muodostaa yhteyden RDD:n ja relaatiotaulukon välille. Se tarjoaa paljon tiiviimmän integraation relaatio- ja proseduurikäsittelyn välillä deklaratiivisen Dataframe API:n avulla, joka on integroitu Spark-koodiin.
SQL:n avulla se voi olla helposti useamman käyttäjien saatavilla ja parantaa optimointia nykyisille käyttäjille. Se tukee myös monenlaisia tietolähteitä ja algoritmeja Big-datassa.
PySpark SQL:n ominaisuus
PySpark SQL:n ominaisuudet on esitetty alla:
1) Johdonmukaisuus Data Access
Se tarjoaa johdonmukaisen tiedonsaannin tarkoittaa, että SQL tukee jaettua tapaa käyttää erilaisia tietolähteitä, kuten Hive, Avro, Parquet, JSON ja JDBC. Sillä on merkittävä rooli kaikkien olemassa olevien käyttäjien mukauttamisessa Spark SQL:ään.
2) Yhdistäminen Sparkiin
PySpark SQL -kyselyt on integroitu Spark-ohjelmiin. Voimme käyttää kyselyjä Spark-ohjelmien sisällä.
Yksi sen suurimmista eduista on, että kehittäjien ei tarvitse hallita tilavirheitä manuaalisesti tai pitää sovellusta synkronoituna erätöiden kanssa.
3) Vakioliitännät
Se tarjoaa yhteyden JDBC:n tai ODBC:n kautta, ja nämä kaksi ovat alan standardeja business intelligence -työkalujen liitettävyydelle.
4) Käyttäjän määrittämät toiminnot
PySpark SQL:ssä on kieliyhdistelmä User-Defined Function (UDF:t). UDF:llä määritellään uusi sarakepohjainen funktio, joka laajentaa Spark SQL:n DSL:n sanastoa DataFramen muuntamista varten.
5) Hive-yhteensopivuus
PySpark SQL suorittaa muokkaamattomia Hive-kyselyjä nykyisille tiedoille. Se mahdollistaa täyden yhteensopivuuden nykyisten Hive-tietojen kanssa.
PySpark SQL-moduuli
Jotkut tärkeät Spark SQL- ja DataFrame-luokat ovat seuraavat:
Harkitse seuraavaa PySpark SQL -esimerkkiä.
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()
Lähtö:
+-----+ |hello| +-----+ |spark| +-----+
Koodin selitys:
Yllä olevassa koodissa olemme tuoneet löytää kipinää moduuli ja soitti findspark.init() rakentaja; sitten toimme SparkSession-moduulin kipinäistunnon luomiseksi.
pyspark.sql-tiedostosta tuo SparkSession
Kipinäistunnon avulla voidaan luoda Dataset ja DataFrame API. SparkSessionilla voidaan myös luoda DataFrame, rekisteröidä DataFrame taulukoksi, suorittaa SQL:ää taulukoiden yli, tallentaa välimuistitaulukkoa ja lukea parkettitiedostoa.
luokan rakentaja
Se on Spark Sessionin rakentaja.
getOrCreate()
Sitä käytetään olemassa olevan SparkSession, tai jos olemassa olevaa ei ole, luo uusi rakentajassa asetettujen asetusten perusteella.
Muutamia muita menetelmiä
Muutamia PySpark SQL:n menetelmiä ovat seuraavat:
1. sovelluksen nimi(nimi)
Sitä käytetään asettamaan sovelluksen nimi, joka näytetään Spark-verkkokäyttöliittymässä. Parametri nimi hyväksyy parametrin nimen.
2. config(key=ei mitään, arvo = ei mitään, conf = ei mitään)
Sitä käytetään määrittämään asetusvaihtoehto. Tällä menetelmällä asetetut asetukset siirretään automaattisesti molempiin SparkConf ja SparkSession asetukset.
from pyspark.conf import SparkConfSparkSession.builder.config(conf=SparkConf())
Parametrit:
3. mestari (mestari)
Se asettaa kipinän pää-URL-osoitteen, johon yhdistetään, kuten 'paikallinen' toimimaan paikallisesti, 'paikallinen[4]' toimimaan paikallisesti neljän ytimen kanssa.
Parametrit:
4. SparkSession.catalog
Se on käyttöliittymä, jonka käyttäjä voi luoda, pudottaa, muuttaa tai tehdä kyselyjä taustalla olevasta tietokannasta, taulukoista, funktioista jne.
5. SparkSession.conf
Se on ajonaikainen konfigurointirajapinta kipinöille. Tämä on käyttöliittymä, jonka kautta käyttäjä voi saada ja määrittää kaikki Spark- ja Hadoop-kokoonpanot, jotka liittyvät Spark SQL:ään.
luokka pyspark.sql.DataFrame
Se on hajautettu kokoelma tietoja, jotka on ryhmitelty nimettyihin sarakkeisiin. DataFrame on samanlainen kuin Spark SQL:n relaatiotaulukko, ja se voidaan luoda SQLContextin eri funktioilla.
student = sqlContext.read.csv('...')
Datakehyksen luomisen jälkeen voimme käsitellä sitä käyttämällä useita verkkoaluekohtaisia kieliä (DSL), jotka ovat DataFramen ennalta määritettyjä toimintoja. Harkitse seuraavaa esimerkkiä.
# 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'})
Tarkastellaanpa seuraavaa esimerkkiä:
Kyselyt Spark SQL:llä
Seuraavassa koodissa luomme ensin DataFrame-kehyksen ja suoritamme SQL-kyselyt tietojen hakemiseksi. Harkitse seuraavaa koodia:
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()
Lähtö:
+----------------+ | 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| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+
Käytä groupBy()-funktiota
java silmukalle
GroupBy()-funktio kerää samankaltaisia luokkatietoja.
songdf.groupBy('Genre').count().show()
Lähtö:
+----------------+-----+ | 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| +----------------+-----+
jakauma (numeroosiot, *sarakkeet)
The jakelu() palauttaa uuden DataFramen, joka on osiointilauseke. Tämä toiminto hyväksyy kaksi parametria numeroosiot ja *col. The numeroosiot parametri määrittää sarakkeiden tavoitemäärän.
song_spotify.repartition(10).rdd.getNumPartitions() data = song_spotify.union(song_spotify).repartition('Energy') data.show(5)
Lähtö:
+---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_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