logo

PySpark SQL

Apache Spark je najuspješniji softver Apache Software Foundationa i dizajniran za brzo računalstvo. Nekoliko industrija koristi Apache Spark za pronalaženje svojih rješenja. PySpark SQL je modul u Sparku koji integrira relacijsku obradu sa Sparkovim API-jem za funkcionalno programiranje. Podatke možemo izdvojiti pomoću SQL upitnog jezika. Upite možemo koristiti isto kao i SQL jezik.

Ako imate osnovno razumijevanje RDBMS-a, PySpark SQL bit će jednostavan za korištenje, gdje možete proširiti ograničenja tradicionalne relacijske obrade podataka. Spark također podržava Hive Query Language, ali postoje ograničenja baze podataka Hive. Spark SQL je razvijen kako bi uklonio nedostatke baze podataka Hive. Pogledajmo sljedeće nedostatke Hive-a:

Nedostaci Hive

  • Ne može nastaviti s obradom, što znači da ako izvođenje ne uspije usred tijeka rada, ne možete nastaviti s mjesta gdje je zapelo.
  • Ne možemo ispuštati šifrirane baze podataka u kaskadi kada je smeće omogućeno. To dovodi do pogreške u izvršenju. Za ispuštanje takve vrste baze podataka korisnici moraju koristiti opciju Čišćenje.
  • Ad-hoc upiti se izvršavaju pomoću MapReducea, koji je pokrenuo Hive, ali kada analiziramo bazu podataka srednje veličine, to usporava izvedbu.
  • Hive ne podržava operaciju ažuriranja ili brisanja.
  • Ograničen je na podršku podupita.

Ovi nedostaci su razlozi za razvoj Apache SQL-a.

PySpark SQL Kratki uvod

PySpark podržava integriranu relacijsku obradu sa Sparkovim funkcionalnim programiranjem. Pruža podršku za različite izvore podataka kako bi se omogućilo isprepletanje SQL upita s transformacijama koda, što rezultira vrlo moćnim alatom.

PySpark SQL uspostavlja vezu između RDD-a i relacijske tablice. Omogućuje mnogo bližu integraciju između relacijske i proceduralne obrade putem deklarativnog Dataframe API-ja, koji je integriran sa Spark kodom.

Korištenjem SQL-a može biti lako dostupan većem broju korisnika i poboljšati optimizaciju za postojeće. Također podržava širok raspon izvora podataka i algoritama u Big-data.

Značajka PySpark SQL-a

Značajke PySpark SQL-a navedene su u nastavku:

1) Pristup podacima o dosljednosti

Omogućuje dosljedan pristup podacima, što znači da SQL podržava zajednički način pristupa različitim izvorima podataka kao što su Hive, Avro, Parquet, JSON i JDBC. Igra značajnu ulogu u prilagođavanju svih postojećih korisnika u Spark SQL.

2) Inkorporacija sa Sparkom

PySpark SQL upiti integrirani su sa Spark programima. Možemo koristiti upite unutar Spark programa.

Jedna od njegovih najvećih prednosti je ta što programeri ne moraju ručno upravljati neuspjehom stanja ili održavati aplikaciju sinkroniziranom sa skupnim poslovima.

3) Standardna povezivost

Omogućuje vezu putem JDBC ili ODBC, a ova dva su industrijski standardi za povezivanje za alate poslovne inteligencije.

4) Korisnički definirane funkcije

PySpark SQL ima kombiniranu jezičnu korisnički definiranu funkciju (UDF). UDF se koristi za definiranje nove funkcije temeljene na stupcu koja proširuje vokabular DSL-a Spark SQL-a za transformaciju DataFramea.

5) Kompatibilnost košnice

PySpark SQL pokreće nepromijenjene Hive upite na trenutnim podacima. Omogućuje potpunu kompatibilnost s trenutnim Hive podacima.

PySpark SQL modul

Neke važne klase Spark SQL i DataFrames su sljedeće:

    pyspark.sql.SparkSession:Predstavlja glavnu ulaznu točku za DataFrame i SQL funkcionalnost.pyspark.sql.DataFrame:Predstavlja distribuiranu zbirku podataka grupiranih u imenovane stupce.pyspark.sql.Stupac:Predstavlja izraz stupca u a DataFrame. pyspark.sql.Red:Predstavlja niz podataka u a DataFrame. pyspark.sql.GroupedData:Metode agregacije, vratio DataFrame.groupBy(). pyspark.sql.DataFrameNaFunctions:Predstavlja metode za rukovanje podacima koji nedostaju (nulte vrijednosti).pyspark.sql.DataFrameStatFunctions:Predstavlja metode za funkcionalnost statistike.pysark.sql.functions:Predstavlja popis ugrađenih funkcija dostupnih za DataFrame. pyspark.sql.types:Predstavlja popis dostupnih tipova podataka.pyspark.sql.Prozor:Koristi se za rad s funkcijama prozora.

Razmotrite sljedeći primjer PySpark SQL-a.

 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() 

Izlaz:

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

Objašnjenje koda:

U gornjem kodu uvezli smo findspark modul i tzv findspark.init() konstruktor; zatim smo uvezli modul SparkSession da bismo stvorili spark sesiju.

iz pyspark.sql uvesti SparkSession

Spark sesija može se koristiti za stvaranje skupa podataka i DataFrame API-ja. SparkSession se također može koristiti za stvaranje DataFramea, registraciju DataFramea kao tablice, izvršavanje SQL-a nad tablicama, predmemoriju tablice i čitanje parket datoteke.

graditelj razreda

To je graditelj Spark Session-a.

getOrCreate()

Koristi se za dobivanje postojećeg SparkSession, ili ako ne postoji, stvorite novi na temelju opcija postavljenih u alatu za izgradnju.

Nekoliko drugih metoda

Nekoliko metoda PySpark SQL-a je sljedeće:

1. appName(ime)

Koristi se za postavljanje naziva aplikacije, koji će biti prikazan u Spark web UI. Parametar Ime prihvaća naziv parametra.

2. config(ključ=Ništa, vrijednost = Ništa, conf = Ništa)

Koristi se za postavljanje opcije konfiguracije. Opcije postavljene ovom metodom automatski se prenose na oboje SparkConf i SparkSession konfiguracija.

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

Parametri:

    ključ-Niz naziva ključa svojstva konfiguracije.vrijednost-Predstavlja vrijednost svojstva konfiguracije.konf -Instanca SparkConf.

3. majstor(majstor)

Postavlja glavni spark url za povezivanje, kao što je 'local' za lokalno pokretanje, 'local[4]' za lokalno pokretanje s 4 jezgre.

Parametri:

    ovladati; majstorski:url za spark master.

4. SparkSession.katalog

To je sučelje koje korisnik može kreirati, ispustiti, mijenjati ili postavljati upite temeljnoj bazi podataka, tablicama, funkcijama itd.

5. SparkSession.conf

To je runtime konfiguracijsko sučelje za spark. Ovo je sučelje kroz koje korisnik može dobiti i postaviti sve Spark i Hadoop konfiguracije koje su relevantne za Spark SQL.

klasa pyspark.sql.DataFrame

To je distribuirana zbirka podataka grupiranih u imenovane stupce. DataFrame je sličan relacijskoj tablici u Spark SQL-u, može se stvoriti pomoću različitih funkcija u SQLContext-u.

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

Nakon stvaranja podatkovnog okvira, njime možemo upravljati pomoću nekoliko jezika specifičnih za domenu (DSL) koji su unaprijed definirane funkcije DataFramea. Razmotrite sljedeći primjer.

 # 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'}) 

Razmotrimo sljedeći primjer:

Postavljanje upita pomoću Spark SQL-a

U sljedećem kodu prvo stvaramo DataFrame i izvršavamo SQL upite za dohvaćanje podataka. Razmotrite sljedeći kôd:

 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() 

Izlaz:

 +----------------+ | 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| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ 

Korištenje funkcije groupBy().

Funkcija groupBy() prikuplja podatke o sličnim kategorijama.

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

Izlaz:

 +----------------+-----+ | 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| +----------------+-----+ 

distribucija (broj particija, * stupaca)

The distribucija() vraća novi DataFrame koji je izraz particioniranja. Ova funkcija prihvaća dva parametra numparticije i *kol. The numparticije parametar specificira ciljni broj stupaca.

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

Izlaz:

knn
 +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_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