logo

PySpark SQL

Apache Spark ist die erfolgreichste Software der Apache Software Foundation und für schnelles Rechnen konzipiert. Mehrere Branchen nutzen Apache Spark, um ihre Lösungen zu finden. PySpark SQL ist ein Modul in Spark, das die relationale Verarbeitung mit der funktionalen Programmier-API von Spark integriert. Wir können die Daten mithilfe einer SQL-Abfragesprache extrahieren. Wir können die Abfragen genauso verwenden wie die SQL-Sprache.

Wenn Sie über grundlegende RDBMS-Kenntnisse verfügen, ist PySpark SQL einfach zu verwenden, da Sie die Einschränkungen der herkömmlichen relationalen Datenverarbeitung erweitern können. Spark unterstützt auch die Hive Query Language, es gibt jedoch Einschränkungen der Hive-Datenbank. Spark SQL wurde entwickelt, um die Nachteile der Hive-Datenbank zu beseitigen. Werfen wir einen Blick auf die folgenden Nachteile von Hive:

Nachteile von Hive

  • Die Verarbeitung kann nicht fortgesetzt werden. Das heißt, wenn die Ausführung mitten in einem Workflow fehlschlägt, können Sie nicht an der Stelle fortfahren, an der sie hängengeblieben ist.
  • Wir können die verschlüsselten Datenbanken nicht kaskadiert löschen, wenn der Papierkorb aktiviert ist. Es führt zum Ausführungsfehler. Um einen solchen Datenbanktyp zu löschen, müssen Benutzer die Option „Löschen“ verwenden.
  • Die Ad-hoc-Abfragen werden mit MapReduce ausgeführt, das vom Hive gestartet wird, aber wenn wir die Datenbank mittlerer Größe analysieren, verzögert es die Leistung.
  • Hive unterstützt den Aktualisierungs- oder Löschvorgang nicht.
  • Es ist auf die Unterstützung von Unterabfragen beschränkt.

Diese Nachteile sind die Gründe für die Entwicklung von Apache SQL.

if und else in Bash

Kurze Einführung in PySpark SQL

PySpark unterstützt die integrierte relationale Verarbeitung mit der funktionalen Programmierung von Spark. Es bietet Unterstützung für die verschiedenen Datenquellen und ermöglicht die Verknüpfung von SQL-Abfragen mit Codetransformationen, wodurch ein sehr leistungsfähiges Tool entsteht.

PySpark SQL stellt die Verbindung zwischen dem RDD und der relationalen Tabelle her. Es bietet eine viel engere Integration zwischen relationaler und prozeduraler Verarbeitung durch die deklarative Dataframe-API, die in Spark-Code integriert ist.

Mithilfe von SQL kann es für mehr Benutzer leicht zugänglich gemacht werden und die Optimierung für die aktuellen Benutzer verbessert werden. Es unterstützt auch die breite Palette an Datenquellen und Algorithmen in Big Data.

Funktion von PySpark SQL

Die Funktionen von PySpark SQL sind unten aufgeführt:

1) Konsistenzdatenzugriff

Es bietet einen konsistenten Datenzugriff, was bedeutet, dass SQL eine gemeinsame Möglichkeit für den Zugriff auf eine Vielzahl von Datenquellen unterstützt, z Hive, Avro, Parquet, JSON und JDBC. Es spielt eine wichtige Rolle bei der Integration aller vorhandenen Benutzer in Spark SQL.

2) Eingliederung in Spark

PySpark-SQL-Abfragen sind in Spark-Programme integriert. Wir können die Abfragen innerhalb der Spark-Programme verwenden.

Einer der größten Vorteile besteht darin, dass Entwickler Statusfehler nicht manuell verwalten oder die Anwendung mit Batch-Jobs synchron halten müssen.

3) Standardkonnektivität

Es stellt eine Verbindung über JDBC oder ODBC bereit. Diese beiden sind die Industriestandards für die Konnektivität von Business-Intelligence-Tools.

Logo Java

4) Benutzerdefinierte Funktionen

PySpark SQL verfügt über eine sprachkombinierte benutzerdefinierte Funktion (UDFs). UDF wird verwendet, um eine neue spaltenbasierte Funktion zu definieren, die das Vokabular des DSL von Spark SQL für die Transformation von DataFrame erweitert.

5) Hive-Kompatibilität

PySpark SQL führt unveränderte Hive-Abfragen für aktuelle Daten aus. Es ermöglicht volle Kompatibilität mit aktuellen Hive-Daten.

PySpark SQL-Modul

Einige wichtige Klassen von Spark SQL und DataFrames sind die folgenden:

    pyspark.sql.SparkSession:Es stellt den Haupteinstiegspunkt für dar Datenrahmen und SQL-Funktionalität.pyspark.sql.DataFrame:Es stellt eine verteilte Sammlung von Daten dar, die in benannten Spalten gruppiert sind.pyspark.sql.Column:Es stellt einen Spaltenausdruck in a dar Datenrahmen. pyspark.sql.Row:Es stellt eine Datenzeile in a dar Datenrahmen. pyspark.sql.GroupedData:Aggregationsmethoden, zurückgegeben von DataFrame.groupBy(). pyspark.sql.DataFrameNaFunktionen:Es stellt Methoden zur Behandlung fehlender Daten (Nullwerte) dar.pyspark.sql.DataFrameStatFunctions:Es stellt Methoden für Statistikfunktionen dar.pysark.sql.functions:Es stellt eine Liste der integrierten Funktionen dar, die für verfügbar sind Datenrahmen. pyspark.sql.types:Es stellt eine Liste der verfügbaren Datentypen dar.pyspark.sql.Window:Es wird verwendet, um mit Fensterfunktionen zu arbeiten.

Betrachten Sie das folgende Beispiel von 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() 

Ausgabe:

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

Code-Erklärung:

Im obigen Code haben wir die importiert findspark Modul und aufgerufen findspark.init() Konstrukteur; Anschließend haben wir das SparkSession-Modul importiert, um eine Spark-Sitzung zu erstellen.

aus pyspark.sql SparkSession importieren

Eine Spark-Sitzung kann zum Erstellen der Dataset- und DataFrame-API verwendet werden. Eine SparkSession kann auch verwendet werden, um DataFrame zu erstellen, DataFrame als Tabelle zu registrieren, SQL über Tabellen auszuführen, Tabellen zwischenzuspeichern und Parquet-Dateien zu lesen.

Klassenersteller

Es ist ein Builder von Spark Session.

Java, wie man überschreibt

getOrCreate()

Es wird verwendet, um eine vorhandene zu erhalten SparkSession, Oder wenn noch keins vorhanden ist, erstellen Sie ein neues basierend auf den im Builder festgelegten Optionen.

Nur wenige andere Methoden

Es folgen einige Methoden von PySpark SQL:

1. appName(name)

Es wird verwendet, um den Namen der Anwendung festzulegen, der in der Spark-Web-Benutzeroberfläche angezeigt wird. Der Parameter Name akzeptiert den Namen des Parameters.

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

Es wird verwendet, um eine Konfigurationsoption festzulegen. Mit dieser Methode festgelegte Optionen werden automatisch an beide weitergegeben SparkConf Und SparkSession 's Konfiguration.

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

Parameter:

    Schlüssel-Eine Schlüsselnamenzeichenfolge einer Konfigurationseigenschaft.Wert-Es stellt den Wert einer Konfigurationseigenschaft dar.conf -Eine Instanz von SparkConf.

3. Meister(Meister)

Es legt die Spark-Master-URL fest, zu der eine Verbindung hergestellt werden soll, z. B. „local“ für die lokale Ausführung und „local[4]“ für die lokale Ausführung mit 4 Kernen.

Parameter:

    Meister:eine URL für Spark Master.

4. SparkSession.catalog

Es handelt sich um eine Schnittstelle, über die der Benutzer die zugrunde liegende Datenbank, Tabellen, Funktionen usw. erstellen, löschen, ändern oder abfragen kann.

5. SparkSession.conf

Es handelt sich um eine Laufzeitkonfigurationsschnittstelle für Spark. Dies ist die Schnittstelle, über die der Benutzer alle für Spark SQL relevanten Spark- und Hadoop-Konfigurationen abrufen und festlegen kann.

Klasse pyspark.sql.DataFrame

Es handelt sich um eine verteilte Sammlung von Daten, die in benannten Spalten gruppiert sind. Ein DataFrame ähnelt der relationalen Tabelle in Spark SQL und kann mithilfe verschiedener Funktionen in SQLContext erstellt werden.

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

Nach der Erstellung des Datenrahmens können wir ihn mithilfe der verschiedenen domänenspezifischen Sprachen (DSL) bearbeiten, bei denen es sich um vordefinierte Funktionen von DataFrame handelt. Betrachten Sie das folgende Beispiel.

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

Betrachten wir das folgende Beispiel:

Abfragen mit Spark SQL

Im folgenden Code erstellen wir zunächst einen DataFrame und führen die SQL-Abfragen aus, um die Daten abzurufen. Betrachten Sie den folgenden Code:

Reverse-String Java
 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() 

Ausgabe:

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

Verwenden der Funktion groupBy()

Die Funktion groupBy() sammelt die ähnlichen Kategoriedaten.

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

Ausgabe:

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

Verteilung(AnzahlPartitionen, *Spalten)

Der Verteilung() gibt einen neuen DataFrame zurück, der ein Partitionierungsausdruck ist. Diese Funktion akzeptiert zwei Parameter Anzahl Partitionen Und *col. Der Anzahl Partitionen Der Parameter gibt die Zielanzahl der Spalten an.

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

Ausgabe:

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