Funzione pyspark dense_rank finestra

Funzione pyspark dense_rank finestra
Dense_rank () 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.

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

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

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 Dense_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.

Dobbiamo seguire i seguenti passaggi per partizionare e applicare Dense_rank sui 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 della finestra e ordinarli in base alla colonna utilizzando la funzione OrderBy ().
    Sintassi:
    partizione = finestra.Partitionby ("colonna").orderby ("colonna")
    Possiamo ordinare i dati partizionati con la colonna partizionata o qualsiasi altra colonna.
  3. Ora puoi usare la funzione Dense_rank () sulla funzione di partiti utilizzando over ().
    Quindi, aggiungeremo una colonna per archiviare il numero di riga usando la funzione WithColumn ().
    Sintassi:
    dataframe_obj.WithColumn ("Nome", Dense_Rank ().Over (partizione))
    Qui, il nome specifica il nome della riga e DataFrame_Obj è il nostro PysPark DataFrame.

    Implementamoci il codice.

Esempio 1
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 chiamata "Rango denso".

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 the dense_rank da pyspark.SQL.funzioni
da pyspark.SQL.Funzioni Importa Dense_rank
#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 menzionare Dense_rank per ogni riga in colonna di rango denso
dataframe_obj.WithColumn ("Dense Rank", Dense_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 Dense_rank () restituisce lo stesso grado-1 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 soggetti_id sono gli stessi, quindi per entrambi, viene assegnato il grado 1.
Per il terzo oracolo, il grado è 2.
Per l'ultimo oracolo, il grado è 3.

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
Qui, usando la funzione della finestra, partizioneremo le righe basate su Tecnologia2.

Infine, classificheremo le righe in base alla colonna soggetto_id in tutte le partizioni aggiungendo una nuova colonna denominata "Rango denso".

(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 the dense_rank da pyspark.SQL.funzioni
da pyspark.SQL.Funzioni Importa Dense_rank
#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 menzionare Dense_rank per ogni riga in colonna di rango denso
dataframe_obj.WithColumn ("Dense Rank", Dense_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. Inoltre, i primi due valori nella colonna soggetto_id sono gli stessi. Quindi, la funzione Dense_rank () restituisce lo stesso grado-1 per i primi due C#e per il terzo C#, il grado è 2.

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 soggetti_id sono gli stessi, quindi per entrambi, viene assegnato il grado 1.
Per il terzo test, il grado è 2.
Per l'ultimo test, il grado era 3.

Esempio 3
Qui, usando la funzione della finestra, partizioneremo le righe basate su Tecnologia2.

Infine, classificheremo le righe in base alla colonna di età in tutte le partizioni aggiungendo una nuova colonna denominata "Rango denso".

(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 the dense_rank da pyspark.SQL.funzioni
da pyspark.SQL.Funzioni Importa Dense_rank
#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 menzionare Dense_rank per ogni riga in colonna di rango denso
dataframe_obj.WithColumn ("Dense Rank", Dense_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 alla colonna Technology2 e ordinata in base alla colonna di età.

Partizioni totali: - 3

Partizione 1:
C# si è verificato tre volte nella prima partizione. Tutti i valori nella colonna di età sono diversi. Quindi, la funzione Dense_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 Dense_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 valori di test, i valori di età sono gli stessi. Quindi, per tre, è assegnato il grado 1.
I valori di età per il quarto e il quinto test sono gli stessi, quindi il grado 2 viene dato ad entrambi.

Conclusione

Abbiamo discusso di partizionamento delle righe nel Frame di dati PysPark e di impostare il grado in ogni partizione utilizzando la funzione Dense_Rank (). Dense_rank in pyspark è una funzione 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.