PYSPARK RANK Fensterfunktion

PYSPARK RANK Fensterfunktion
Die Angabe einer Rangnummer für jede Reihe von PySpark ist der beste Weg, damit es leicht ist, die Zeilen in einer Partition zu finden.

In PYSPARK ist es möglich, die Zeilen im Datenrahmen mithilfe der Fensterfunktion zu partitionieren. Es ist in der erhältlich PYSPARK.sql.Fenster Modul.

Der Vorteil der Partition besteht darin, Datenkonsistenz und Gruppierung zu erreichen. Nachdem wir die Partition durchgeführt haben, können wir die Ränge in jeder Partition mit der Funktion rank () auf die Zeilen setzen.

Es ist möglich, die Zeilen in einem Datenrahmen auf der Grundlage der Werte in einer bestimmten Spalte zu partitionieren. Alle ähnlichen Werte werden also auf jede Partition gesetzt.

Rank () Fensterfunktion

Rang in PySpark ist eine Fensterfunktion, die die Ränge in den Zeilen in jeder Partition festlegt.

Der Rang beginnt von 1 und wenn Werte in zwei oder mehr Zeilen gleich sind, wird der gleiche Rang zugewiesen. Für die nächste Zeile ist der Rang jedoch die folgende Zahlenzählung aus den gebundenen Zeilen (Zeilen mit dem gleichen Rang).

Hier stammen die Werte aus der Spalte, in der wir die Spalte innerhalb angegeben haben Sortieren nach(). Basierend auf den Werten in dieser Spalte, Rang() Überprüft und weist die Rangnummer zu.

Die Hauptsache ist Rang() ist nicht direkt verfügbar. Wir müssen es aus dem importieren PYSPARK.sql.Funktionen Modul.

Syntax zum Importmodul

aus pysspark.sql.Funktionen importieren Rang

Andernfalls können wir dies auch mögen, um alle Methoden aus diesem Modul zu importieren.

aus pysspark.sql.Funktionen importieren *

Wir müssen die folgenden Schritte befolgen, um Partition durchzuführen und Rang auf partitionierte Daten anzuwenden.

Schritte:

  1. Erstellen Sie einen PYSPARK -Datenframe mit ähnlichen Werten in mindestens einer Spalte.
  2. Partitionieren Sie die Daten mithilfe der PartitionBy () -Methode in der Fensterfunktion und bestellen Sie sie basierend auf der Spalte mit der OrderBy () -Funktion.

Syntax:

Partition = Fenster.partitionby ("Spalte").OrderBy ("Spalte")

Wir können die partitionierten Daten mit der partitionierten Spalte oder einer anderen Spalte bestellen.
Nun die verwenden die über() Funktionen auf den partitionierten Zeilen können Sie die verwenden Rang() Funktion. Wir werden also eine Spalte hinzufügen, um die Zeilennummer mit der zu speichern with column () Funktion.
Syntax:

DataFrame_OBJ.with column ("name", rank ().über (Partition))

Der Name gibt hier den Zeilennamen hier an, und DataFrame_OBJ ist unser PYSPARK -Datenframe. Lassen Sie uns den Code implementieren.

Beispiel 1: Rang Technology1 von Subjekt_ID

Hier erstellen wir einen pyspark -Datenrahmen mit 5 Spalten: ['Subjekt_ID', 'Name', 'Age', 'Technology1', 'Technology2'] mit 10 Zeilen und Partition der Zeilen basierend auf Technologie1 Verwenden der Fensterfunktion.

Schließlich werden wir den Zeilen in allen Partitionen Ränge geben, indem wir eine neue Spalte namens hinzufügen RANG.

pysspark importieren
aus pysspark.SQL Import *
Spark_app = SparkSession.Erbauer.App Name('_').Getorcreate ()
Schüler = [(4, 'Sravan', 23, 'Php', 'Testing'),
(4, 'Sravan', 23, 'php', 'testing'),
(46, 'Mounika', 22, ','.Net ',' html '),
(4, "Deepika", 21, "Oracle", "Html"),
(46, 'Mounika', 22, 'Oracle', 'Testing'),
(12, 'Chandrika', 22, 'Hadoop', 'C#'),
(12, "Chandrika", 22, "Oracle", "Testing"),
(4, 'sravan', 23, oracle ',' c#'),
(4, 'Deepika', 21, 'Php', 'C#'),
(46, 'Mounika', 22, ','.Net ',' testing ')
]
DataFrame_OBJ = Spark_App.Createdataframe (Studenten, ['Subjekt_ID', 'Name', 'Alter', 'Technology1', 'Technology2'])
print ("---------- tatsächliche Datenfreque ----------")
DataFrame_OBJ.zeigen()
# Importieren Sie die Fensterfunktion
aus pysspark.sql.Fensterimportfenster
#Port den Rang von PYSPARK.sql.Funktionen
aus pysspark.sql.Funktionen importieren Rang
#Partition den Datenrahmen basierend auf den Werten in der Spalte Technologie1 und
#Bestand die Zeilen in jeder Partition basierend auf der Spalte Subjekt_ID
Partition = Fenster.partitionby ("Technology1").OrderBy ('Subjekt_ID')
print ("---------- partitionierte Datenframe ----------")
#Now Erwähnen Sie Rang für jede Zeile in der Rangspalte
DataFrame_OBJ.WithColumn ("Rank", Rank ().über (Partition)).zeigen()

Ausgang:

Erläuterung
Die erste Ausgabe repräsentiert die tatsächlichen Daten im Datenrahmen. In der zweiten Ausgabe erfolgt die Partition basierend auf dem Technologie1 Spalte.

Gesamtpartitionen: 4

Partition 1:
.Das Netz trat zweimal in der ersten Partition auf. Die Werte in der Spalte Subjekt_ID sind gleich. Daher gibt die Funktion rank () für beide den gleichen Rang zurück .Nettowerte.

Partition 2:
Hadoop ereignete sich einmal in der zweiten Partition. Der Rang ist also 1.

Partition 3:

  • Oracle trat viermal in der Dritten Partition auf.
  • Für die ersten beiden Orakel sind die Subjekt -ID -Werte gleich. Für beide wird Rang 1 also zugewiesen.
  • Für das dritte Orakel beträgt der Rang 3 (Rang 2 wird nicht existieren, da für die beiden oben genannten Orakel 2 Ränge gegeben wurden).
  • Für das letzte Orakel ist der Rang 4.

Partition 4:
PHP trat dreimal in der vierten Partition auf, und die Werte in der Spalte Subjekt_ID sind für alle gleich. Daher ist der Rang 1 für alle PHP.

Beispiel 2: Rang Technology2 von Subjekt_ID

Hier werden wir die Zeilen basierend auf verteilt Technologie2 Verwenden der Fensterfunktion. Schließlich geben wir in allen Partitionen die Zeilen basierend auf der Spalte Subjekt_ID, indem wir eine neue Spalte mit dem Namen “hinzufügen“RANG”.

(Wenn Sie den PYSPark -Datenframe nicht erstellt haben, erstellen Sie ihn mit dem ersten Beispiel.)

# Importieren Sie die Fensterfunktion
aus pysspark.sql.Fensterimportfenster
#Port den Rang von PYSPARK.sql.Funktionen
aus pysspark.sql.Funktionen importieren Rang
#Partition den Datenrahmen basierend auf den Werten in der Spalte Technology2 und
#Bestand die Zeilen in jeder Partition basierend auf der Spalte Subjekt_ID
Partition = Fenster.partitionby ("Technology2").OrderBy ('Subjekt_ID')
print ("---------- partitionierte Datenframe ----------")
#Now Erwähnen Sie Rang für jede Zeile in der Rangspalte
DataFrame_OBJ.WithColumn ("Rank", Rank ().über (Partition)).zeigen()

Ausgang:

Erläuterung
Die Ausgabe repräsentiert die tatsächlichen Daten im Datenrahmen.

In der zweiten Ausgabe erfolgt die Partition basierend auf dem Technologie2 Spalte und basierend auf der Spalte Subjekt_ID bestellt.

Gesamtpartitionen: 3

Partition 1:
C# trat dreimal in der ersten Partition auf. Die ersten beiden Werte in der Spalte Subjekt_ID sind gleich. Daher gibt die Funktion rank () für die ersten beiden C#den gleichen Rang 1 zurück, und für die dritte C#beträgt der Rang 3.

Partition 2:
HTML trat zweimal in der zweiten Partition auf, und die Subjekt -ID -Werte sind für diese beiden unterschiedlich. Daher wird Rang 1 für die erste HTML zugewiesen und Rang 2 für die zweite zugewiesen.

Partition 3:

  • Tests traten fünfmal in der Dritten Partition auf.
  • Für die ersten beiden Tests sind die Subjekt -ID -Werte gleich. Für beide wird Rang 1 also zugewiesen.
  • Für den dritten Test beträgt der Rang 3 (Rang 2 wird nicht existieren, da für die beiden vorherigen Tests 2 Ränge gegeben wurden).
  • Für die letzten Tests betrug der Rang 4.

Beispiel 3: Rang Technology2 nach Alter

Hier werden wir die Zeilen basierend auf verteilt Technologie2 Verwenden der Fensterfunktion.

Schließlich werden wir in allen Partitionen die Zeilen basierend auf der Altersspalte geben, indem wir eine neue Spalte mit dem Namen "namens" hinzufügenRANG”.

(Wenn Sie den PYSPark -Datenframe nicht erstellt haben, erstellen Sie ihn mit dem ersten Beispiel.)

# Importieren Sie die Fensterfunktion
aus pysspark.sql.Fensterimportfenster
#Port den Rang von PYSPARK.sql.Funktionen
aus pysspark.sql.Funktionen importieren Rang
#Partition den Datenrahmen basierend auf den Werten in der Spalte Technology2 und
#Bestand die Zeilen in jeder Partition basierend auf der Altersspalte
Partition = Fenster.partitionby ("Technology2").OrderBy ('Alter')
print ("---------- partitionierte Datenframe ----------")
#Now Erwähnen Sie Rang für jede Zeile in der Rangspalte
DataFrame_OBJ.WithColumn ("Rank", Rank ().über (Partition)).zeigen()

Ausgang:

Erläuterung
Die Ausgabe repräsentiert die tatsächlichen Daten im Datenrahmen. In der zweiten Ausgabe erfolgt die Partition basierend auf dem Technologie2 Spalte und basierend auf der Altersspalte bestellt.

Gesamtpartitionen: 3

Partition 1:
C# trat dreimal in der ersten Partition auf. Und alle Werte in der Altersspalte sind unterschiedlich. Daher gibt die Rank () -Funktion die Ränge 1, 2 und 3 für drei C# -Werte zurück.

Partition 2:
HTML trat zweimal in der ersten Partition auf. Alle Werte in der Altersspalte sind unterschiedlich. Daher gibt die Rank () -Funktion die Ränge 1 und 2 für zwei HTML -Werte zurück.

Partition 3:

  • Tests traten fünfmal in der Dritten Partition auf.
  • Bei den ersten drei Tests sind die Alterswerte gleich. Für drei wird Rang 1 also zugewiesen.
  • Für den vierten und fünften Test sind die Alterswerte gleich. Für zwei wird Rang 4 also zugewiesen.

Abschluss

Wir haben die Partitionation der Zeilen im PYSPARK -Datenrahmen diskutiert und den Rang in jeder Partition mit der Fensterfunktion rank () festgelegt. Rang in PySpark ist eine Fensterfunktion, die die Ränge in den Zeilen in jeder Partition festlegt. Verwenden Sie diesen Befehl, während Sie diese Funktion verwenden aus pysspark.sql.Funktionen importieren Rang.