Funzione di finestra di rango Pyspark

Funzione di finestra di rango Pyspark
Specificare un numero di rango per ogni riga di Pyspark è il modo migliore in modo che sia facile trovare le righe in una partizione.

In PysPark, è possibile partizione delle righe nel frame dati utilizzando la funzione finestra. È disponibile in pyspark.SQL.finestra modulo.

Il vantaggio della partizione è ottenere coerenza e raggruppamento dei dati. Dopo aver eseguito la partizione, possiamo impostare i ranghi sulle righe in ciascuna partizione usando la funzione Rank ().

È possibile partizione delle righe in un telaio di dati in base ai valori in una colonna particolare. Quindi, tutti i valori simili sono impostati su ogni partizione.

Funzione della finestra Rank ()

Il rango in Pyspark è una funzione di finestra che imposta i ranghi sulle righe in ogni partizione.

Il rango parte da 1 e se qualche valori è uguali in due o più righe, lo stesso rango verrà assegnato. Tuttavia, per la riga successiva, il rango sarà il seguente numero che conta dalle righe legate (righe con lo stesso rango).

Qui, i valori provengono dalla colonna in cui abbiamo specificato la colonna all'interno ordinato da(). Quindi, in base ai valori in questa colonna, rango() controlla e assegna il numero di rango.

La cosa principale è rango() non è disponibile direttamente. Dobbiamo importarlo dal pyspark.SQL.funzioni modulo.

Sintassi per importare il modulo

da pyspark.SQL.Funzioni Rank di importazione

Altrimenti, possiamo anche fare così per importare tutti i metodi da questo modulo.

da pyspark.SQL.funzioni importanti *

Dobbiamo seguire i passaggi seguenti per eseguire la partizione e applicare il rango su dati partizionati.

Passaggi:

  1. Crea un frame dati pyspark con valori simili in almeno una colonna.
  2. Partizione I dati utilizzando il metodo partitionby () disponibili nella funzione finestra e ordinarli in base alla colonna utilizzando orderby ().

Sintassi:

partizione = finestra.Partitionby ("colonna").orderby ("colonna")

Possiamo ordinare i dati partizionati con la colonna partizionata o qualsiasi altra colonna.
Ora, usando il Sopra() funzione sulle righe partizionate, è possibile utilizzare il rango() funzione. Quindi, aggiungeremo una colonna per archiviare il numero di riga usando il withColumn () funzione.
Sintassi:

dataframe_obj.WithColumn ("Nome", Rank ().Over (partizione))

Quindi, il nome specifica il nome della riga qui e DataFrame_Obj è il nostro PysPark DataFrame. Implementamoci il codice.

Esempio 1: Rank Technology1 di soggetto_id

Qui, creeremo un frame dati pyspark che ha 5 colonne: ['soggetto_id', 'name', 'age', 'technology1', 'technology2'] con 10 righe e partizione le righe basate su Tecnologia1 Usando la funzione della finestra.

Infine, daremo gradi alle righe in tutte le partizioni aggiungendo una nuova colonna denominata RANGO.

importare pyspark
da pyspark.SQL Import *
Spark_app = SparkSession.costruttore.nome dell'applicazione('_').getOrCreate ()
Studenti = [(4, "Sravan", 23, "Php", "Test"),
(4, "Sravan", 23, "Php", "Test"),
(46, "Mounika", 22, ".Net ',' html '),
(4, "Deepika", 21, "Oracle", "HTML"),
(46, "Mounika", 22, "Oracle", "Test"),
(12, "Chandrika", 22, "Hadoop", "C#"),
(12, "Chandrika", 22, "Oracle", "Test"),
(4, "Sravan", 23, "Oracle", "C#"),
(4, "Deepika", 21, "Php", "C#"),
(46, "Mounika", 22, ".Net ',' test ')
"
DataFrame_obj = Spark_app.CreateAtaFrame (Students, ['soggetto_id', 'name', 'age', 'technology1', 'technology2'])
print ("---------- Frame dati effettivo ----------")
dataframe_obj.spettacolo()
# Importa la funzione della finestra
da pyspark.SQL.finestra di importazione della finestra
#import il rango da pyspark.SQL.funzioni
da pyspark.SQL.Funzioni Rank di importazione
#partition Il frame dati in base ai valori nella colonna Technology1 e
#ordina le righe in ogni partizione in base alla colonna soggetto_id
partizione = finestra.Partitionby ("Technology1").orderby ('soggetto_id')
print ("---------- DataFrame partizionato ----------")
#Now menzione rango per ogni riga nella colonna di rango
dataframe_obj.WithColumn ("Rank", Rank ().Over (partizione)).spettacolo()

Produzione:

Spiegazione
Il primo output rappresenta i dati effettivi presenti nel frame dati. Nel secondo output, la partizione viene eseguita in base al Tecnologia1 colonna.

Partizioni totali: 4

Partizione 1:
.La rete si è verificata due volte nella prima partizione. I valori nella colonna soggetto_id sono gli stessi. Quindi, la funzione Rank () restituisce lo stesso rango per entrambi .Valori netti.

Partizione 2:
Hadoop si è verificato una volta nella seconda partizione. Quindi, il grado è 1.

Partizione 3:

  • Oracle si è verificato quattro volte nella terza partizione.
  • Per i primi due Oracle, i valori soggetto_id sono gli stessi. Quindi, per entrambi, viene assegnato il grado 1.
  • Per il terzo oracolo, il grado è 3 (il grado 2 non esisterà poiché, per i due oracoli sopra, sono stati dati 2 gradi).
  • Per l'ultimo oracolo, il grado è 4.

Partizione 4:
PHP si è verificato tre volte nella quarta partizione e i valori nella colonna soggetto_id sono gli stessi per tutti. Quindi, il rango è 1 per tutti i PHP.

Esempio 2: Rank Technology2 di soggetto_id

Qui, partizioneremo le righe in base a Tecnologia2 Usando la funzione della finestra. Infine, daremo gradi alle righe in base alla colonna soggetto_id in tutte le partizioni aggiungendo una nuova colonna chiamata "RANGO".

(Se non hai creato il frame dati PysPark, crealo utilizzando il primo esempio.)

# Importa la funzione della finestra
da pyspark.SQL.finestra di importazione della finestra
#import il rango da pyspark.SQL.funzioni
da pyspark.SQL.Funzioni Rank di importazione
#partition Il frame dati in base ai valori nella colonna di tecnologia e
#ordina le righe in ogni partizione in base alla colonna soggetto_id
partizione = finestra.Partitionby ("Technology2").orderby ('soggetto_id')
print ("---------- DataFrame partizionato ----------")
#Now menzione rango per ogni riga nella colonna di rango
dataframe_obj.WithColumn ("Rank", Rank ().Over (partizione)).spettacolo()

Produzione:

Spiegazione
L'output rappresenta i dati effettivi presenti nel frame dati.

Nel secondo output, la partizione viene eseguita in base al Tecnologia2 colonna e ordinati in base alla colonna soggetto_id.

Partizioni totali: 3

Partizione 1:
C# si è verificato tre volte nella prima partizione. I primi due valori nella colonna soggetto_id sono gli stessi. Quindi, la funzione Rank () restituisce lo stesso grado 1 per i primi due C#e per il terzo C#, il grado è 3.

Partizione 2:
HTML si è verificato due volte nella seconda partizione e i valori soggetti_id sono diversi per questi due. Quindi, il grado 1 è assegnato per il primo HTML e il grado 2 è assegnato per il secondo.

Partizione 3:

  • I test si sono verificati cinque volte nella terza partizione.
  • Per i primi due test, i valori soggetto_id sono gli stessi. Quindi, per entrambi, viene assegnato il grado 1.
  • Per il terzo test, il grado è 3 (il grado 2 non esisterà poiché, per i due test precedenti, sono stati dati 2 gradi).
  • Per l'ultimo test, il grado era 4.

Esempio 3: Rank Technology2 per età

Qui, partizioneremo le righe in base a Tecnologia2 Usando la funzione della finestra.

Infine, daremo gradi alle righe in base alla colonna di età in tutte le partizioni aggiungendo una nuova colonna chiamata "RANGO".

(Se non hai creato il frame dati PysPark, crealo utilizzando il primo esempio.)

# Importa la funzione della finestra
da pyspark.SQL.finestra di importazione della finestra
#import il rango da pyspark.SQL.funzioni
da pyspark.SQL.Funzioni Rank di importazione
#partition Il frame dati in base ai valori nella colonna di tecnologia e
#Ordina le righe in ogni partizione in base alla colonna di età
partizione = finestra.Partitionby ("Technology2").Orderby ('Age')
print ("---------- DataFrame partizionato ----------")
#Now menzione rango per ogni riga nella colonna di rango
dataframe_obj.WithColumn ("Rank", Rank ().Over (partizione)).spettacolo()

Produzione:

Spiegazione
L'output rappresenta i dati effettivi presenti nel frame dati. Nel secondo output, la partizione viene eseguita in base al Tecnologia2 colonna e ordinata in base alla colonna di età.

Partizioni totali: 3

Partizione 1:
C# si è verificato tre volte nella prima partizione. E tutti i valori nella colonna di età sono diversi. Quindi, la funzione Rank () restituisce i ranghi 1, 2 e 3 per tre valori C#.

Partizione 2:
HTML si è verificato due volte nella prima partizione. Tutti i valori nella colonna di età sono diversi. Quindi, la funzione Rank () restituisce i ranghi 1 e 2 per due valori HTML.

Partizione 3:

  • I test si sono verificati cinque volte nella terza partizione.
  • Per i primi tre test, i valori di età sono gli stessi. Quindi, per tre, viene assegnato il grado 1.
  • Per il quarto e il quinto test, i valori di età sono gli stessi. Quindi, per due, è assegnato il grado 4.

Conclusione

Abbiamo discusso di partizionamento delle righe nel PysPark DataFrame e di impostare il grado in ciascuna partizione utilizzando la funzione Finestra Rank (). Il rango in Pyspark è una funzione di finestra che imposta i ranghi sulle righe in ogni partizione. Assicurati di utilizzare questo comando durante l'utilizzo di questa funzione da pyspark.SQL.Funzioni Rank di importazione.