Heim >Datenbank >MySQL-Tutorial >Wie finde ich effizient die Top-N-Elemente pro Gruppe in einem Spark-DataFrame?

Wie finde ich effizient die Top-N-Elemente pro Gruppe in einem Spark-DataFrame?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 22:55:17904Durchsuche

How to Efficiently Find the Top N Items per Group in a Spark DataFrame?

Gruppierung und TopN mit Spark DataFrame

Einführung:
Spark DataFrame bietet leistungsstarke Funktionen zum Bearbeiten und Aggregieren von Daten. Das Gruppieren von Daten basierend auf bestimmten Spalten und das anschließende Durchführen von Vorgängen innerhalb jeder Gruppe, z. B. das Finden der obersten N-Werte, ist eine häufige Anforderung in der Datenverarbeitung.

Problemstellung:
Bedenken Sie a Spark DataFrame mit Spalten wie Benutzer, Artikel und Bewertung. Die Aufgabe besteht darin, die Daten nach Benutzer zu gruppieren und die obersten N Elemente aus jeder Gruppe zurückzugeben, wobei N eine vordefinierte Zahl ist.

Lösung:

Verwenden Fensterfunktionen:

Scala Code:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.{rank, desc}

val n: Int = ???

// Window definition
val w = Window.partitionBy($"user").orderBy(desc("rating"))

// Filter
df.withColumn("rank", rank.over(w)).where($"rank" <= n)

Erklärung:
Dieser Code nutzt Fensterfunktionen, um Elemente innerhalb jeder Benutzergruppe basierend auf der Bewertungsspalte in absteigender Reihenfolge zu ordnen. Die Rangfunktion weist jeder Zeile innerhalb der Partition einen Rang zu und gibt ihre Position in der sortierten Liste an. Durch Filtern nach Rang <= n werden nur die obersten N Elemente aus jeder Gruppe beibehalten.

Verwenden der row_number-Funktion:

Wenn Sie nicht damit umgehen müssen Bei Bindungen (Fälle, in denen mehrere Elemente den gleichen Rang haben) können Sie row_number anstelle von rank verwenden. Der Code ähnelt weiterhin dem oben, wobei row_number.over(w) rank.over(w) im withColumn-Ausdruck ersetzt.

Durch die Nutzung dieser Gruppierungs- und Fenstertechniken können Sie die obersten N Elemente darin effizient finden jede Gruppe in Ihrem Spark DataFrame, sodass Sie effektiv wertvolle Erkenntnisse aus Ihren Daten extrahieren können.

Das obige ist der detaillierte Inhalt vonWie finde ich effizient die Top-N-Elemente pro Gruppe in einem Spark-DataFrame?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn