Apache Spark je najuspešnejša programska oprema Apache Software Foundation in zasnovana za hitro računalništvo. Več industrij uporablja Apache Spark za iskanje svojih rešitev. PySpark SQL je modul v Sparku, ki integrira relacijsko obdelavo s Sparkovim API-jem za funkcionalno programiranje. Podatke lahko ekstrahiramo z uporabo poizvedovalnega jezika SQL. Poizvedbe lahko uporabljamo enako kot jezik SQL.
Če imate osnovno razumevanje RDBMS, bo PySpark SQL enostaven za uporabo, kjer lahko razširite omejitev tradicionalne relacijske obdelave podatkov. Spark podpira tudi Hive Query Language, vendar obstajajo omejitve baze podatkov Hive. Spark SQL je bil razvit za odpravo pomanjkljivosti baze podatkov Hive. Oglejmo si naslednje pomanjkljivosti Hive:
Slabosti Hive
- Ne more nadaljevati obdelave, kar pomeni, da če izvedba ne uspe sredi poteka dela, ne morete nadaljevati od tam, kjer se je zataknila.
- Šifriranih baz podatkov ne moremo kaskadno izpustiti, ko je koš omogočen. To vodi do napake pri izvajanju. Za izbris take vrste baze podatkov morajo uporabniki uporabiti možnost Čiščenje.
- Ad-hoc poizvedbe se izvajajo z uporabo MapReduce, ki ga zažene Hive, vendar ko analiziramo srednje veliko bazo podatkov, upočasni delovanje.
- Hive ne podpira operacije posodobitve ali brisanja.
- Omejena je na podporo za podpoizvedbo.
Te pomanjkljivosti so razlogi za razvoj Apache SQL.
PySpark SQL Kratek uvod
PySpark podpira integrirano relacijsko obdelavo s Sparkovim funkcionalnim programiranjem. Zagotavlja podporo za različne vire podatkov, ki omogoča prepletanje poizvedb SQL s transformacijami kode, kar je zelo zmogljivo orodje.
PySpark SQL vzpostavi povezavo med RDD in relacijsko tabelo. Zagotavlja veliko tesnejšo integracijo med relacijsko in proceduralno obdelavo prek deklarativnega API-ja Dataframe, ki je integriran s kodo Spark.
Z uporabo SQL je lahko zlahka dostopen več uporabnikom in izboljša optimizacijo za trenutne. Podpira tudi široko paleto podatkovnih virov in algoritmov v velikih podatkih.
Funkcija PySpark SQL
Funkcije PySpark SQL so navedene spodaj:
1) Dostop do konsistentnih podatkov
Zagotavlja dosleden dostop do podatkov, kar pomeni, da SQL podpira skupni način dostopa do različnih virov podatkov, kot so Hive, Avro, Parquet, JSON in JDBC. Ima pomembno vlogo pri prilagajanju vseh obstoječih uporabnikov v Spark SQL.
2) Vključitev s Spark
Poizvedbe PySpark SQL so integrirane s programi Spark. Poizvedbe lahko uporabimo znotraj programov Spark.
Ena njegovih največjih prednosti je, da razvijalcem ni treba ročno upravljati napak v stanju ali ohranjati aplikacije v sinhronizaciji s paketnimi opravili.
3) Standardna povezljivost
Zagotavlja povezavo prek JDBC ali ODBC in ta dva sta industrijska standarda za povezljivost za orodja za poslovno inteligenco.
4) Uporabniško določene funkcije
PySpark SQL ima jezikovno kombinirano uporabniško definirano funkcijo (UDF). UDF se uporablja za definiranje nove funkcije na podlagi stolpcev, ki razširja besednjak DSL-ja Spark SQL za preoblikovanje DataFrame.
5) Združljivost s panji
PySpark SQL izvaja nespremenjene poizvedbe Hive na trenutnih podatkih. Omogoča popolno združljivost s trenutnimi podatki Hive.
PySpark SQL modul
Nekateri pomembni razredi Spark SQL in DataFrames so naslednji:
Razmislite o naslednjem primeru PySpark SQL.
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()
Izhod:
+-----+ |hello| +-----+ |spark| +-----+
Razlaga kode:
V zgornji kodi smo uvozili findspark modul in poklican findspark.init() konstruktor; nato smo uvozili modul SparkSession, da ustvarimo sejo spark.
iz pyspark.sql uvozi SparkSession
Spark sejo je mogoče uporabiti za ustvarjanje Dataset in DataFrame API. SparkSession je mogoče uporabiti tudi za ustvarjanje DataFrame, registracijo DataFrame kot tabele, izvajanje SQL nad tabelami, predpomnilnik tabele in branje parketne datoteke.
izbirnik poizvedb
graditelj razreda
Je graditelj Spark Session.
getOrCreate()
Uporablja se za pridobivanje obstoječega SparkSession, ali če obstoječega ni, ustvarite novega na podlagi možnosti, nastavljenih v graditelju.
Nekaj drugih metod
Nekaj metod PySpark SQL je naslednjih:
1. ime aplikacije (ime)
Uporablja se za nastavitev imena aplikacije, ki bo prikazana v spletnem uporabniškem vmesniku Spark. Parameter ime sprejme ime parametra.
2. config(key=None, value = None, conf = None)
Uporablja se za nastavitev možnosti konfiguracije. Možnosti, nastavljene s to metodo, se samodejno razširijo na oba SparkConf in SparkSession konfiguracija uporabnika.
from pyspark.conf import SparkConfSparkSession.builder.config(conf=SparkConf())
Parametri:
3. mojster (mojster)
Nastavi glavni url spark za povezavo, na primer »local« za lokalno izvajanje, »local[4]« za lokalno delovanje s 4 jedri.
Parametri:
4. SparkSession.katalog
To je vmesnik, ki ga lahko uporabnik ustvari, spusti, spremeni ali izvede poizvedbo v osnovni bazi podatkov, tabelah, funkcijah itd.
5. SparkSession.conf
Je konfiguracijski vmesnik med izvajanjem za spark. To je vmesnik, prek katerega lahko uporabnik pridobi in nastavi vse konfiguracije Spark in Hadoop, ki so pomembne za Spark SQL.
razred pyspark.sql.DataFrame
Je porazdeljena zbirka podatkov, združenih v poimenovane stolpce. DataFrame je podoben relacijski tabeli v Spark SQL in ga je mogoče ustvariti z uporabo različnih funkcij v SQLContext.
student = sqlContext.read.csv('...')
Po izdelavi podatkovnega okvira lahko z njim manipuliramo z uporabo več domensko specifičnih jezikov (DSL), ki so vnaprej določene funkcije DataFrame. Razmislite o naslednjem primeru.
# 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'})
Oglejmo si naslednji primer:
Poizvedovanje z uporabo Spark SQL
V naslednji kodi najprej ustvarimo DataFrame in izvedemo poizvedbe SQL za pridobitev podatkov. Razmislite o naslednji kodi:
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()
Izhod:
+----------------+ | 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| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+
Uporaba funkcije groupBy().
Funkcija groupBy() zbira podatke o podobnih kategorijah.
songdf.groupBy('Genre').count().show()
Izhod:
+----------------+-----+ | 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 (število particij, *stolpci)
The distribucija () vrne nov DataFrame, ki je particijski izraz. Ta funkcija sprejme dva parametra numpartitions in *kol. The numpartitions parameter določa ciljno število stolpcev.
song_spotify.repartition(10).rdd.getNumPartitions() data = song_spotify.union(song_spotify).repartition('Energy') data.show(5)
Izhod:
+---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_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