Apache Spark ir visveiksmīgākā Apache Software Foundation programmatūra, kas paredzēta ātrai skaitļošanai. Vairākas nozares izmanto Apache Spark, lai atrastu savus risinājumus. PySpark SQL ir Spark modulis, kas integrē relāciju apstrādi ar Spark funkcionālās programmēšanas API. Mēs varam iegūt datus, izmantojot SQL vaicājumu valodu. Mēs varam izmantot vaicājumus tāpat kā SQL valodu.
Ja jums ir pamatzināšanas par RDBMS, PySpark SQL būs ērti lietojams, kur varēsiet paplašināt tradicionālās relāciju datu apstrādes ierobežojumus. Spark atbalsta arī Hive vaicājumu valodu, taču Hive datubāzei ir ierobežojumi. Spark SQL tika izstrādāts, lai novērstu Hive datu bāzes trūkumus. Apskatīsim šādus Hive trūkumus:
Hive trūkumi
- Tas nevar atsākt apstrādi, kas nozīmē, ka, ja izpilde neizdodas darbplūsmas vidū, jūs nevarat atsākt no vietas, kur tā iestrēga.
- Ja ir iespējota miskaste, mēs nevaram nomest šifrētās datu bāzes kaskādē. Tas noved pie izpildes kļūdas. Lai atmestu šāda veida datubāzi, lietotājiem ir jāizmanto opcija Iztīrīt.
- Ad-hoc vaicājumi tiek izpildīti, izmantojot MapReduce, ko palaida Hive, bet, analizējot vidēja izmēra datu bāzi, tas aizkavē veiktspēju.
- Hive neatbalsta atjaunināšanas vai dzēšanas darbību.
- Tas attiecas tikai uz apakšvaicājuma atbalstu.
Šie trūkumi ir iemesli Apache SQL izstrādei.
PySpark SQL īss ievads
PySpark atbalsta integrētu relāciju apstrādi ar Spark funkcionālo programmēšanu. Tas nodrošina atbalstu dažādiem datu avotiem, ļaujot apvienot SQL vaicājumus ar koda transformācijām, tādējādi radot ļoti jaudīgu rīku.
PySpark SQL izveido savienojumu starp RDD un relāciju tabulu. Tas nodrošina daudz ciešāku integrāciju starp relāciju un procesuālo apstrādi, izmantojot deklaratīvo Dataframe API, kas ir integrēta ar Spark kodu.
Izmantojot SQL, tas var būt viegli pieejams lielākam skaitam lietotāju un uzlabot optimizāciju pašreizējiem lietotājiem. Tas atbalsta arī plašu datu avotu un algoritmu klāstu Big-datos.
PySpark SQL funkcija
PySpark SQL funkcijas ir norādītas zemāk:
1) Konsekvences datu piekļuve
Tas nodrošina konsekventu piekļuvi datiem, kas nozīmē, ka SQL atbalsta kopīgu veidu, kā piekļūt dažādiem datu avotiem, piemēram Hive, Avro, Parquet, JSON un JDBC. Tam ir nozīmīga loma visu esošo lietotāju uzņemšanā Spark SQL.
2) apvienošana ar Spark
PySpark SQL vaicājumi ir integrēti Spark programmās. Mēs varam izmantot vaicājumus Spark programmās.
Viena no tās priekšrocībām ir tā, ka izstrādātājiem nav manuāli jāpārvalda stāvokļa kļūme vai lietojumprogramma nav jāsinhronizē ar pakešu darbiem.
3) Standarta savienojamība
Tas nodrošina savienojumu, izmantojot JDBC vai ODBC, un šie divi ir biznesa informācijas rīku savienojamības nozares standarti.
4) Lietotāja definētas funkcijas
PySpark SQL ir valodu kombinēta lietotāja definētā funkcija (UDF). UDF tiek izmantots, lai definētu jaunu kolonnu funkciju, kas paplašina Spark SQL DSL vārdu krājumu DataFrame pārveidošanai.
5) Saderība ar stropu
PySpark SQL izpilda nemodificētus Hive vaicājumus pašreizējiem datiem. Tas nodrošina pilnīgu savietojamību ar pašreizējiem Hive datiem.
PySpark SQL modulis
Dažas svarīgas Spark SQL un DataFrames klases ir šādas:
Apsveriet šādu PySpark SQL piemēru.
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()
Izvade:
+-----+ |hello| +-----+ |spark| +-----+
Koda skaidrojums:
Iepriekš minētajā kodā mēs esam importējuši atrast dzirksti moduli un izsauca findspark.init() konstruktors; pēc tam mēs importējām SparkSession moduli, lai izveidotu spark sesiju.
no pyspark.sql importēt SparkSession
Lai izveidotu Dataset un DataFrame API, var izmantot dzirksteļošanas sesiju. SparkSession var izmantot arī, lai izveidotu DataFrame, reģistrētu DataFrame kā tabulu, izpildītu SQL tabulās, saglabātu kešatmiņas tabulu un lasītu parketa failu.
klases celtnieks
Tas ir Spark Session veidotājs.
getOrCreate()
To izmanto, lai iegūtu esošu SparkSession, vai, ja tāda nav, izveidojiet jaunu, pamatojoties uz būvētājā iestatītajām opcijām.
Dažas citas metodes
Dažas PySpark SQL metodes ir šādas:
propozicionālā loģika
1. lietotnes nosaukums(nosaukums)
To izmanto, lai iestatītu lietojumprogrammas nosaukumu, kas tiks parādīts Spark tīmekļa lietotāja saskarnē. Parametrs nosaukums pieņem parametra nosaukumu.
2. config(key = nav, vērtība = nav, conf = nav)
To izmanto, lai iestatītu konfigurācijas opciju. Opcijas, kas iestatītas, izmantojot šo metodi, tiek automātiski izplatītas abiem SparkConf un SparkSession konfigurācija.
from pyspark.conf import SparkConfSparkSession.builder.config(conf=SparkConf())
Parametri:
3. meistars (meistars)
Tas iestata galveno URL, ar kuru izveidot savienojumu, piemēram, “local”, lai palaistu lokāli, “local[4]”, lai darbotos lokāli ar 4 kodoliem.
Parametri:
4. SparkSession.catalog
Tā ir saskarne, ko lietotājs var izveidot, nomest, mainīt vai vaicāt pamatā esošajai datubāzei, tabulām, funkcijām utt.
5. SparkSession.conf
Tas ir izpildlaika konfigurācijas interfeiss dzirkstelei. Šī ir saskarne, ar kuras palīdzību lietotājs var iegūt un iestatīt visas Spark un Hadoop konfigurācijas, kas attiecas uz Spark SQL.
klases pyspark.sql.DataFrame
Tā ir izplatīta datu kolekcija, kas sagrupēta kolonnās ar nosaukumu. DataFrame ir līdzīgs Spark SQL relāciju tabulai, un to var izveidot, izmantojot dažādas funkcijas SQLContext.
student = sqlContext.read.csv('...')
Pēc datu rāmja izveides mēs varam ar to manipulēt, izmantojot vairākas domēnam specifiskas valodas (DSL), kas ir iepriekš noteiktas DataFrame funkcijas. Apsveriet šādu piemēru.
# 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'})
Apskatīsim šādu piemēru:
Vaicājumi, izmantojot Spark SQL
Nākamajā kodā vispirms mēs izveidojam DataFrame un izpildām SQL vaicājumus, lai izgūtu datus. Apsveriet šādu kodu:
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()
Izvade:
+----------------+ | 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| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+
Funkcijas groupBy() izmantošana
Funkcija groupBy() apkopo līdzīgu kategoriju datus.
songdf.groupBy('Genre').count().show()
Izvade:
+----------------+-----+ | 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| +----------------+-----+
sadalījums (numura nodalījumi, *kolas)
The izplatīšana() atgriež jaunu DataFrame, kas ir sadalīšanas izteiksme. Šī funkcija pieņem divus parametrus numpartitions un *kol. The numpartitions parametrs norāda mērķa kolonnu skaitu.
song_spotify.repartition(10).rdd.getNumPartitions() data = song_spotify.union(song_spotify).repartition('Energy') data.show(5)
Izvade:
+---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_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