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