logo

PySpark SQL

Apache Spark és el programari més reeixit d'Apache Software Foundation i està dissenyat per a la informàtica ràpida. Diverses indústries estan utilitzant Apache Spark per trobar les seves solucions. PySpark SQL és un mòdul a Spark que integra el processament relacional amb l'API de programació funcional de Spark. Podem extreure les dades mitjançant un llenguatge de consulta SQL. Podem utilitzar les consultes igual que el llenguatge SQL.

Si teniu una comprensió bàsica de RDBMS, PySpark SQL serà fàcil d'utilitzar, on podreu ampliar la limitació del processament de dades relacional tradicional. Spark també admet el llenguatge de consulta Hive, però hi ha limitacions a la base de dades Hive. Spark SQL es va desenvolupar per eliminar els inconvenients de la base de dades Hive. Fem una ullada als següents inconvenients de Hive:

Inconvenients de Hive

  • No es pot reprendre el processament, el que significa que si l'execució falla enmig d'un flux de treball, no es pot reprendre des d'on s'ha bloquejat.
  • No podem deixar caure les bases de dades xifrades en cascada quan la paperera està habilitada. Condueix a l'error d'execució. Per eliminar aquest tipus de base de dades, els usuaris han d'utilitzar l'opció Purga.
  • Les consultes ad-hoc s'executen mitjançant MapReduce, que llança Hive, però quan analitzem la base de dades de mida mitjana, retarda el rendiment.
  • Hive no admet l'operació d'actualització o supressió.
  • Es limita al suport de subconsultes.

Aquests inconvenients són els motius per desenvolupar l'Apache SQL.

PySpark SQL Breu introducció

PySpark admet el processament relacional integrat amb la programació funcional de Spark. Proporciona suport per a les diferents fonts de dades per fer possible teixir consultes SQL amb transformacions de codi, resultant així una eina molt potent.

PySpark SQL estableix la connexió entre el RDD i la taula relacional. Proporciona una integració molt més estreta entre el processament relacional i procedimental mitjançant l'API declarativa de Dataframe, que s'integra amb el codi Spark.

Mitjançant SQL, es pot accedir fàcilment a més usuaris i millorar l'optimització dels actuals. També admet l'ampli ventall de fonts de dades i algorismes en Big-data.

Característica de PySpark SQL

Les característiques de PySpark SQL es mostren a continuació:

1) Accés a les dades de coherència

Proporciona un accés coherent a les dades significa que SQL admet una manera compartida d'accedir a una varietat de fonts de dades, com ara Hive, Avro, Parquet, JSON i JDBC. Té un paper important a l'hora d'acomodar tots els usuaris existents a Spark SQL.

2) Incorporació a Spark

Les consultes SQL de PySpark s'integren amb els programes Spark. Podem utilitzar les consultes dins dels programes Spark.

Un dels seus avantatges més importants és que els desenvolupadors no han de gestionar manualment els errors d'estat ni mantenir l'aplicació sincronitzada amb els treballs per lots.

3) Connectivitat estàndard

Proporciona una connexió mitjançant JDBC o ODBC, i aquests dos són els estàndards de la indústria per a la connectivitat per a eines d'intel·ligència empresarial.

4) Funcions definides per l'usuari

PySpark SQL té una funció definida per l'usuari (UDF) combinada amb un llenguatge. L'UDF s'utilitza per definir una nova funció basada en columnes que amplia el vocabulari del DSL de Spark SQL per transformar DataFrame.

5) Compatibilitat del rusc

PySpark SQL executa consultes Hive sense modificar a les dades actuals. Permet una compatibilitat total amb les dades actuals de Hive.

Mòdul PySpark SQL

Algunes classes importants de Spark SQL i DataFrames són les següents:

    pyspark.sql.SparkSession:Representa el principal punt d'entrada per DataFrame i funcionalitat SQL.pyspark.sql.DataFrame:Representa una col·lecció distribuïda de dades agrupades en columnes amb nom.pyspark.sql.Column:Representa una expressió de columna en a DataFrame. pyspark.sql.Row:Representa una fila de dades en a DataFrame. pyspark.sql.GroupedData:Mètodes d'agregació, retornats per DataFrame.groupBy(). pyspark.sql.DataFrameNaFunctions:Representa mètodes per gestionar les dades que falten (valors nuls).pyspark.sql.DataFrameStatFunctions:Representa mètodes per a la funcionalitat d'estadístiques.pysark.sql.functions:Representa una llista de funcions integrades disponibles per a DataFrame. pyspark.sql.types:Representa una llista de tipus de dades disponibles.pyspark.sql.Window:S'utilitza per treballar amb funcions de la finestra.

Considereu l'exemple següent de 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() 

Sortida:

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

Explicació del codi:

En el codi anterior, hem importat el troballa mòdul i cridat findspark.init() constructor; després, vam importar el mòdul SparkSession per crear una sessió d'espurna.

des de pyspark.sql importació SparkSession

Es pot utilitzar una sessió d'espurna per crear l'API Dataset i DataFrame. També es pot utilitzar una SparkSession per crear DataFrame, registrar DataFrame com a taula, executar SQL sobre taules, memòria cau i llegir fitxers de parquet.

constructor de classes

És un constructor de Spark Session.

getOrCreate()

S'utilitza per obtenir un existent SparkSession, o si no n'hi ha cap, creeu-ne un de nou basant-vos en les opcions establertes al constructor.

Pocs altres mètodes

Alguns mètodes de PySpark SQL són els següents:

1. appName(nom)

S'utilitza per definir el nom de l'aplicació, que es mostrarà a la interfície d'usuari web de Spark. El paràmetre nom accepta el nom del paràmetre.

2. config(clau=Cap, valor = Cap, conf = Cap)

S'utilitza per establir una opció de configuració. Les opcions establertes amb aquest mètode es propaguen automàticament a tots dos SparkConf i SparkSession configuració de.

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

Paràmetres:

ankita dave
    clau-Una cadena de nom de clau d'una propietat de configuració.valor-Representa el valor d'una propietat de configuració.conf -Una instància de SparkConf.

3. mestre (mestre)

Estableix l'URL principal de l'espurna per connectar-se, com ara 'local' per executar-se localment, 'local[4]' per executar-se localment amb 4 nuclis.

Paràmetres:

    mestre:una URL per a Spark Master.

4. SparkSession.catàleg

És una interfície que l'usuari pot crear, deixar anar, alterar o consultar la base de dades subjacent, taules, funcions, etc.

5. SparkSession.conf

És una interfície de configuració en temps d'execució per a Spark. Aquesta és la interfície mitjançant la qual l'usuari pot obtenir i configurar totes les configuracions de Spark i Hadoop que siguin rellevants per a Spark SQL.

classe pyspark.sql.DataFrame

És una col·lecció distribuïda de dades agrupades en columnes amb nom. Un DataFrame és similar a la taula relacional a Spark SQL, es pot crear mitjançant diverses funcions a SQLContext.

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

Després de crear el dataframe, podem manipular-lo mitjançant els diversos idiomes específics del domini (DSL) que són funcions predefinides de DataFrame. Considereu l'exemple següent.

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

Considerem l'exemple següent:

Consulta amb Spark SQL

Al codi següent, primer, creem un DataFrame i executem les consultes SQL per recuperar les dades. Considereu el codi següent:

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

Sortida:

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

Utilitzant la funció groupBy().

La funció groupBy() recull les dades de categories similars.

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

Sortida:

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

distribució (número de particions, *cols)

El distribució () retorna un nou DataFrame que és una expressió de partició. Aquesta funció accepta dos paràmetres numparticions i *col. El numparticions El paràmetre especifica el nombre objectiu de columnes.

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

Sortida:

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