Numerotarea Rândurilor pe Partiții cu Window și row_number în Apache Spark & PySpark

window Apache Spark 3.5 / PySpark Q&A / Distribuie cod

Numerotarea secvențială a înregistrărilor în interiorul fiecărei grupe logice pentru deduplicare sau top N.

Sintaxă
Window.partitionBy(col).orderBy(col) / F.row_number().over(windowSpec)

Funcția analitică F.row_number() combinată cu o specificație de fereastră Window asignează un număr secvențial incremental (începând de la 1) fiecărui rând din fiecare partiție definită.

Este cel mai utilizat tipar de inginerie a datelor pentru extragerea Top N elemente dintr-o categorie sau pentru deduplicare (păstrând doar cea mai recentă versiune a unei înregistrări pe baza unui timestamp).

Exemplu: Preluarea ultimei tranzacții efectuate de fiecare client
from pyspark.sql import functions as F
from pyspark.sql.window import Window

# Fereastră partiționată după client și ordonată descrescător după dată:
window_client = Window.partitionBy("client_id").orderBy(F.col("data_tranzactie").desc())

df_numerotat = df_tranzactii.withColumn("numar_linie", F.row_number().over(window_client))

# Filtrarea liniei 1 returnează exact ultima tranzacție per client:
df_ultima_tranzactie = df_numerotat.filter(F.col("numar_linie") == 1)
df_ultima_tranzactie.show(5)

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Numerotarea Rândurilor pe Partiții cu Window și row_number

Ai o nelămurire despre utilizarea comenzii Numerotarea Rândurilor pe Partiții cu Window și row_number sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.