PYSPARK DENSE_RANK -Fensterfunktion

PYSPARK DENSE_RANK -Fensterfunktion
dense_rank () in pyspark ist eine Fensterfunktion, die die Reihen in jeder Partition auf die Zeilen festlegt.

Der Rang beginnt von 1 und wenn Werte in zwei oder mehr Zeilen gleich sind, wird der gleiche Rang zugewiesen.

Hier stammen die Werte aus der Spalte, in der wir die Spalte in OrderBy () angegeben haben. Basierend auf den Werten in dieser Spalte prüft Dense_Rank () die Werte und weist die Rangnummer zu.

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

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. Nach der Ausführung der Partition können wir die Ränge in jeder Partition mit der Funktion Dense_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.

Wir müssen die folgenden Schritte ausführen, um die Dense_Rank auf partitionierte Daten zu partitionieren und anzuwenden:

Schritte:

  1. Erstellen Sie einen PYSPARK -Datenframe mit ähnlichen Werten in mindestens einer Spalte.
  2. Partitionieren Sie die Daten mit der in der Fensterfunktion verfügbaren PartitionBy () -Methode und bestellen Sie sie basierend auf der Spalte mit der Funktion "OrderBy ()).
    Syntax:
    Partition = Fenster.partitionby ("Spalte").OrderBy ("Spalte")
    Wir können die partitionierten Daten mit der partitionierten Spalte oder einer anderen Spalte bestellen.
  3. Jetzt können Sie die Funktion Dense_Rank () auf den partitionierten Zeilen verwenden, die über () über () -Funktion.
    Wir werden also eine Spalte hinzufügen, um die Zeilennummer mit der Funktion WithColumn () zu speichern.
    Syntax:
    DataFrame_OBJ.WithColumn ("Name", dense_rank ().über (Partition))
    Hier gibt der Name den Zeilennamen an, und DataFrame_OBJ ist unser PYSPARK -Datenframe.

    Lassen Sie uns den Code implementieren.

Beispiel 1
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 mit dem Namen “hinzufügen“Dichter 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
#importieren Sie die Dense_Rank von pyspark.sql.Funktionen
aus pysspark.sql.Funktionen importieren Dense_Rank
#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 den Dense_Rank für jede Zeile in einer dichten Rangspalte
DataFrame_OBJ.WithColumn ("Dense Rang", Dense_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 Dense_rank () den gleichen Rang-1 für beide 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, so dass für beide Rang-1 zugewiesen wird.
Für das dritte Orakel ist der Rang 2.
Für das letzte Orakel ist der Rang 3.

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
Mit der Fensterfunktion werden wir hier die Zeilen basierend auf verteilt Technologie2.

Schließlich werden wir die Zeilen basierend auf der Spalte von Subjekt_ID in allen Partitionen einstufen, indem wir eine neue Spalte mit dem Namen “hinzufügen“Dichter Rang”.

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

# Importieren Sie die Fensterfunktion
aus pysspark.sql.Fensterimportfenster
#importieren Sie die Dense_Rank von pyspark.sql.Funktionen
aus pysspark.sql.Funktionen importieren Dense_Rank
#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 den Dense_Rank für jede Zeile in einer dichten Rangspalte
DataFrame_OBJ.WithColumn ("Dense Rang", Dense_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. Auch die ersten beiden Werte in der Spalte Subjekt_ID sind gleich. Daher gibt die Funktion Dense_rank () für die ersten beiden C#den gleichen Rang-1 zurück, und für die dritte C#ist der Rang 2.

Partition 2:
HTML trat zweimal in der zweiten Partition auf, und die Subjekt -ID -Werte sind für diese beiden unterschiedlich. Daher ist Rang-1 für das 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, so dass für beide Rang-1 zugewiesen wird.
Für die dritten Tests beträgt der Rang 2.
Für die letzten Tests betrug der Rang 3.

Beispiel 3
Mit der Fensterfunktion werden wir hier die Zeilen basierend auf verteilt Technologie2.

Schließlich werden wir die Zeilen basierend auf der Altersspalte in allen Partitionen einstufen, indem wir eine neue Spalte mit dem Namen “hinzufügen“Dichter Rang”.

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

# Importieren Sie die Fensterfunktion
aus pysspark.sql.Fensterimportfenster
#importieren Sie die Dense_Rank von pyspark.sql.Funktionen
aus pysspark.sql.Funktionen importieren Dense_Rank
#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 den Dense_Rank für jede Zeile in einer dichten Rangspalte
DataFrame_OBJ.WithColumn ("Dense Rang", Dense_Rank ().über (Partition)).zeigen()

Ausgang:

Erläuterung
Die Ausgabe repräsentiert die tatsächlichen Daten im Datenrahmen.
In der zweiten Ausgabe wird die Partition basierend auf der Spalte Technology2 durchgeführt und auf der Altersspalte geordnet.

Gesamtpartitionen: - 3

Partition 1:
C# trat dreimal in der ersten Partition auf. Alle Werte in der Altersspalte sind unterschiedlich. Daher gibt die Funktion Dense_rank () die Rang 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 Funktion Dense_rank () die Ränge 1 und 2 für zwei HTML -Werte zurück.

Partition 3:
Tests traten fünfmal in der Dritten Partition auf.
Für die ersten drei Testwerte sind die Alterswerte gleich. Für drei wird Rang-1 also zugewiesen.
Die Alterswerte für den vierten und fünften Test sind gleich, so dass Rang-2 beides gegeben wird.

Abschluss

Wir haben die Partitionation der Zeilen im PYSPARK -Datenrahmen diskutiert und den Rang in jeder Partition mit der Fensterfunktion dense_rank () festgelegt. Dense_rank 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.