logo

PySpark SQL

Apache Spark je nejúspěšnější software Apache Software Foundation a je navržen pro rychlé výpočty. Několik průmyslových odvětví používá Apache Spark k nalezení svých řešení. PySpark SQL je modul ve Sparku, který integruje relační zpracování s funkčním programovacím API Spark. Data můžeme extrahovat pomocí dotazovacího jazyka SQL. Dotazy můžeme použít stejně jako jazyk SQL.

Pokud máte základní znalosti o RDBMS, PySpark SQL se snadno používá, kde můžete rozšířit omezení tradičního zpracování relačních dat. Spark také podporuje Hive Query Language, ale existují omezení databáze Hive. Spark SQL byl vyvinut k odstranění nedostatků databáze Hive. Podívejme se na následující nevýhody Hive:

Nevýhody Hive

  • Nemůže obnovit zpracování, což znamená, že pokud se provádění nezdaří uprostřed pracovního postupu, nemůžete pokračovat od místa, kde se zaseklo.
  • Nemůžeme zahodit šifrované databáze v kaskádě, když je povolen koš. Vede to k chybě provedení. Pro odstranění takového typu databáze musí uživatelé použít volbu Purge.
  • Dotazy ad-hoc jsou prováděny pomocí MapReduce, který spouští Hive, ale když analyzujeme středně velkou databázi, zpomaluje to výkon.
  • Podregistr nepodporuje operaci aktualizace nebo odstranění.
  • Je omezena na podporu poddotazu.

Tyto nevýhody jsou důvody pro vývoj Apache SQL.

Stručný úvod PySpark SQL

PySpark podporuje integrované relační zpracování s funkčním programováním Spark. Poskytuje podporu pro různé zdroje dat, aby bylo možné propojit dotazy SQL s transformacemi kódu, což má za následek velmi výkonný nástroj.

PySpark SQL vytváří spojení mezi RDD a relační tabulkou. Poskytuje mnohem užší integraci mezi relačním a procedurálním zpracováním prostřednictvím deklarativního rozhraní Dataframe API, které je integrováno s kódem Spark.

Pomocí SQL může být snadno dostupný pro více uživatelů a zlepšit optimalizaci pro ty stávající. Podporuje také širokou škálu zdrojů dat a algoritmů v Big-data.

Funkce PySpark SQL

Vlastnosti PySpark SQL jsou uvedeny níže:

1) Konzistentní přístup k datům

Poskytuje konzistentní přístup k datům, což znamená, že SQL podporuje sdílený způsob přístupu k různým zdrojům dat, jako je např Hive, Avro, Parquet, JSON a JDBC. Hraje významnou roli při přizpůsobování všech stávajících uživatelů Spark SQL.

2) Začlenění se Sparkem

preg_match

Dotazy PySpark SQL jsou integrovány s programy Spark. Můžeme použít dotazy uvnitř programů Spark.

Jednou z jeho největších výhod je, že vývojáři nemusí ručně spravovat selhání stavu nebo udržovat aplikaci synchronizovanou s dávkovými úlohami.

3) Standardní konektivita

Poskytuje připojení přes JDBC nebo ODBC a tyto dva jsou průmyslovými standardy pro připojení pro nástroje business intelligence.

4) Uživatelsky definované funkce

PySpark SQL má jazykovou kombinaci User-Defined Function (UDF). UDF se používá k definování nové funkce založené na sloupcích, která rozšiřuje slovní zásobu DSL Spark SQL pro transformaci DataFrame.

java mapa

5) Kompatibilita úlu

PySpark SQL spouští neupravené dotazy Hive na aktuální data. Umožňuje plnou kompatibilitu s aktuálními daty Hive.

PySpark SQL modul

Některé důležité třídy Spark SQL a DataFrames jsou následující:

    pyspark.sql.SparkSession:Představuje hlavní vstupní bod pro DataFrame a funkce SQL.pyspark.sql.DataFrame:Představuje distribuovanou kolekci dat seskupených do pojmenovaných sloupců.pyspark.sql.Column:Představuje sloupcový výraz v a DataFrame. pyspark.sql.Row:Představuje řadu dat v a DataFrame. pyspark.sql.GroupedData:Metody agregace, vrácené uživatelem DataFrame.groupBy(). pyspark.sql.DataFrameNaFunctions:Představuje metody pro manipulaci s chybějícími daty (nulové hodnoty).pyspark.sql.DataFrameStatFunctions:Představuje metody pro funkcionalitu statistiky.pysark.sql.functions:Představuje seznam vestavěných funkcí dostupných pro DataFrame. pyspark.sql.types:Představuje seznam dostupných datových typů.pyspark.sql.Window:Používá se pro práci s funkcemi okna.

Zvažte následující příklad 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() 

Výstup:

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

Vysvětlení kódu:

Ve výše uvedeném kódu jsme importovali findspark modul a zavolal findspark.init() konstruktér; poté jsme importovali modul SparkSession, abychom vytvořili spark session.

java string join

z pyspark.sql importujte SparkSession

Spark session lze použít k vytvoření Dataset a DataFrame API. SparkSession lze také použít k vytvoření DataFrame, registraci DataFrame jako tabulky, spouštění SQL přes tabulky, mezipaměti tabulky a čtení souboru parket.

stavitel třídy

Je to stavitel Spark Session.

getOrCreate()

Používá se k získání existujícího SparkSession, nebo pokud žádný neexistuje, vytvořte nový na základě možností nastavených v staviteli.

Několik dalších metod

Několik metod PySpark SQL je následujících:

1. appName(name)

Slouží k nastavení názvu aplikace, který se bude zobrazovat ve webovém UI Sparku. Parametr název přijímá název parametru.

2. config(key=None, value = None, conf = None)

Používá se k nastavení možnosti konfigurace. Možnosti nastavené pomocí této metody se automaticky rozšíří do obou SparkConf a SparkSession konfigurace uživatele.

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

Parametry:

    klíč-Řetězec názvu klíče konfigurační vlastnosti.hodnota-Představuje hodnotu konfigurační vlastnosti.conf -Instance SparkConf.

3. mistr (mistr)

Nastavuje hlavní adresu URL sparku, ke které se má připojit, například „local“ pro místní spuštění, „local[4]“ pro místní spuštění se 4 jádry.

Parametry:

    mistr:adresa URL pro spark master.

4. Katalog SparkSession

Je to rozhraní, které může uživatel vytvářet, rušit, měnit nebo dotazovat na podkladovou databázi, tabulky, funkce atd.

víceřádkový komentář powershell

5. SparkSession.conf

znak na řetězec

Je to runtime konfigurační rozhraní pro jiskru. Toto je rozhraní, přes které může uživatel získat a nastavit všechny konfigurace Spark a Hadoop, které jsou relevantní pro Spark SQL.

třídy pyspark.sql.DataFrame

Jedná se o distribuovanou kolekci dat seskupených do pojmenovaných sloupců. DataFrame je podobný jako relační tabulka v Spark SQL, lze jej vytvořit pomocí různých funkcí v SQLContext.

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

Po vytvoření datového rámce s ním můžeme manipulovat pomocí několika doménově specifických jazyků (DSL), což jsou předdefinované funkce DataFrame. Zvažte následující příklad.

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

Podívejme se na následující příklad:

Dotazování pomocí Spark SQL

V následujícím kódu nejprve vytvoříme DataFrame a spustíme SQL dotazy k načtení dat. Zvažte následující 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() 

Výstup:

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

Použití funkce groupBy().

Funkce groupBy() shromažďuje podobná data kategorie.

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

Výstup:

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

rozdělení (numpartitions, *cols)

The rozdělení() vrátí nový DataFrame, což je rozdělovací výraz. Tato funkce přijímá dva parametry numpartitions a *kol. The numpartitions parametr určuje cílový počet sloupců.

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

Výstup:

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