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