logo

PySpark SQL

Az Apache Spark az Apache Software Foundation legsikeresebb szoftvere, amelyet gyors számítástechnikára terveztek. Számos iparág használja az Apache Sparkot a megoldások megtalálásához. A PySpark SQL egy modul a Sparkban, amely integrálja a relációs feldolgozást a Spark funkcionális programozási API-jával. Az adatokat SQL lekérdezési nyelv használatával kinyerhetjük. A lekérdezéseket ugyanúgy használhatjuk, mint az SQL nyelvet.

lista string java

Ha rendelkezik alapvető ismeretekkel az RDBMS-ről, a PySpark SQL könnyen használható lesz, ahol kiterjesztheti a hagyományos relációs adatfeldolgozás korlátait. A Spark a Hive lekérdezési nyelvet is támogatja, de a Hive adatbázisnak vannak korlátai. A Spark SQL-t a Hive-adatbázis hátrányainak kiküszöbölésére fejlesztették ki. Nézzük meg a Hive következő hátrányait:

A Hive hátrányai

  • Nem tudja folytatni a feldolgozást, ami azt jelenti, hogy ha a végrehajtás meghiúsul egy munkafolyamat közepén, nem folytathatja onnan, ahol elakadt.
  • A titkosított adatbázisokat nem tudjuk kaszkádba dobni, ha a kuka engedélyezve van. Ez végrehajtási hibához vezet. Az ilyen típusú adatbázisok eldobásához a felhasználóknak a Purge opciót kell használniuk.
  • Az ad-hoc lekérdezések végrehajtása a MapReduce segítségével történik, amelyet a Hive indít el, de amikor a közepes méretű adatbázist elemezzük, késlelteti a teljesítményt.
  • A Hive nem támogatja a frissítési vagy törlési műveletet.
  • Az allekérdezés támogatására korlátozódik.

Ezek a hátrányok az Apache SQL fejlesztésének okai.

PySpark SQL rövid bevezetés

A PySpark támogatja az integrált relációs feldolgozást a Spark funkcionális programozásával. Támogatja a különböző adatforrásokat, lehetővé téve az SQL-lekérdezések kódtranszformációkkal történő szövését, így egy nagyon hatékony eszköz.

A PySpark SQL létrehozza a kapcsolatot az RDD és a relációs tábla között. Sokkal szorosabb integrációt biztosít a relációs és eljárási feldolgozás között a deklaratív Dataframe API-n keresztül, amely integrálva van a Spark kóddal.

Az SQL használatával több felhasználó számára könnyen elérhetővé válik, és javítja a jelenlegiek optimalizálását. Támogatja a Big-data adatforrások és algoritmusok széles skáláját is.

A PySpark SQL funkciója

A PySpark SQL szolgáltatásai az alábbiak:

1) Az adatok konzisztenciája

Konzisztens adathozzáférést biztosít, ami azt jelenti, hogy az SQL támogatja a megosztott módot a különféle adatforrásokhoz, például Hive, Avro, Parquet, JSON és JDBC. Jelentős szerepet játszik az összes meglévő felhasználó Spark SQL-be ​​való befogadásában.

2) Beépítés a Sparkba

A PySpark SQL lekérdezések integrálva vannak a Spark programokkal. A lekérdezéseket a Spark programokon belül használhatjuk.

Az egyik legnagyobb előnye, hogy a fejlesztőknek nem kell manuálisan kezelniük az állapothibákat, vagy nem kell szinkronban tartaniuk az alkalmazást a kötegelt munkákkal.

3) Szabványos csatlakozás

JDBC-n vagy ODBC-n keresztül biztosít kapcsolatot, és ez a kettő az üzleti intelligencia eszközök csatlakoztathatóságának iparági szabványa.

4) Felhasználó által meghatározott funkciók

A PySpark SQL-nek van egy nyelvi kombinált felhasználói függvénye (UDF). Az UDF egy új oszlopalapú függvény meghatározására szolgál, amely kiterjeszti a Spark SQL DSL-jének szókincsét a DataFrame átalakításához.

5) Kaptár-kompatibilitás

A PySpark SQL módosítatlan Hive-lekérdezéseket futtat az aktuális adatokon. Teljes kompatibilitást tesz lehetővé a jelenlegi Hive-adatokkal.

PySpark SQL modul

A Spark SQL és DataFrames néhány fontos osztálya a következő:

    pyspark.sql.SparkSession:Ez jelenti a fő belépési pontot DataFrame és SQL funkciókat.pyspark.sql.DataFrame:Ez az adatok elosztott gyűjteményét képviseli, elnevezett oszlopokba csoportosítva.pyspark.sql.Oszlop:Ez egy oszlopkifejezést jelent a-ban DataFrame. pyspark.sql.Row:Ez egy adatsort jelent a DataFrame. pyspark.sql.GroupedData:Összesítési módszerek, visszaküldve DataFrame.groupBy(). pyspark.sql.DataFrameNaFunctions:A hiányzó adatok (null értékek) kezelésére szolgáló módszereket képviseli.pyspark.sql.DataFrameStatFunctions:Ez a statisztikai funkciók módszereit képviseli.pysark.sql.functions:Ez a rendelkezésre álló beépített funkciók listája DataFrame. pyspark.sql.types:Ez az elérhető adattípusok listáját jeleníti meg.pyspark.sql.Window:Ablakfüggvényekkel való együttműködésre szolgál.

Tekintsük a PySpark SQL következő példáját.

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

Kimenet:

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

Kód magyarázata:

A fenti kódban importáltuk a talál szikrát modult és hívják findspark.init() konstruktőr; majd importáltuk a SparkSession modult a spark munkamenet létrehozásához.

java lista

a pyspark.sql-ből importálja a SparkSession-t

Spark-munkamenet használható a Dataset és a DataFrame API létrehozásához. A SparkSession is használható DataFrame létrehozására, DataFrame táblaként való regisztrálására, SQL futtatására táblákon, gyorsítótárazásra és parkettafájl olvasására.

osztályú építő

Ez a Spark Session építője.

getOrCreate()

Meglévő megszerzésére használják SparkSession, vagy ha nincs meglévő, hozzon létre egy újat a builderben beállított opciók alapján.

Néhány egyéb módszer

A PySpark SQL néhány módszere a következő:

1. alkalmazásnév(név)

Az alkalmazás nevének beállítására szolgál, amely megjelenik a Spark webes felhasználói felületén. A paraméter név elfogadja a paraméter nevét.

2. config(kulcs=nincs, érték = nincs, conf = nincs)

Konfigurációs opció beállítására szolgál. Az ezzel a módszerrel beállított opciók automatikusan átkerülnek mindkettőre SparkConf és SparkSession konfigurációja.

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

Paraméterek:

    kulcs-Egy konfigurációs tulajdonság kulcsnév-karakterlánca.érték-Ez egy konfigurációs tulajdonság értékét jelenti.konf -A SparkConf egy példánya.

3. mester(mester)

– mondta Madhuri

Beállítja a spark master URL-t, amelyhez kapcsolódni kell, például a „local”-t a helyi futtatáshoz, a „local[4]”-t a helyi futtatáshoz 4 maggal.

Paraméterek:

    fő:a szikramester URL-je.

4. SparkSession.catalog

Ez egy olyan felület, amellyel a felhasználó létrehozhatja, eldobhatja, módosíthatja vagy lekérdezheti az alapul szolgáló adatbázist, táblákat, függvényeket stb.

5. SparkSession.conf

tömb lista java

Ez egy futásidejű konfigurációs interfész a Spark számára. Ez az a felület, amelyen keresztül a felhasználó megkaphatja és beállíthatja a Spark SQL-hez kapcsolódó összes Spark és Hadoop konfigurációt.

osztály pyspark.sql.DataFrame

Ez egy elosztott adatgyűjtemény elnevezett oszlopokba csoportosítva. A DataFrame hasonló a Spark SQL relációs táblájához, és az SQLContext különböző funkcióival hozható létre.

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

Az adatkeret létrehozása után számos domain-specifikus nyelv (DSL) segítségével tudjuk kezelni, amelyek a DataFrame előre definiált funkciói. Tekintsük a következő példát.

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

Tekintsük a következő példát:

Lekérdezés Spark SQL használatával

A következő kódban először létrehozunk egy DataFrame-et, és végrehajtjuk az SQL lekérdezéseket az adatok lekéréséhez. Vegye figyelembe a következő kódot:

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

Kimenet:

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

A groupBy() függvény használata

A groupBy() függvény összegyűjti a hasonló kategóriájú adatokat.

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

Kimenet:

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

eloszlás (számpartíciók, *oszlopok)

A terjesztés() egy új DataFrame-et ad vissza, amely egy particionáló kifejezés. Ez a függvény két paramétert fogad el számmegosztások és *col. A számmegosztások paraméter határozza meg az oszlopok célszámát.

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

Kimenet:

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