Heim > Datenbank > MySQL-Tutorial > Wie generiert man sequentielle Zeilennummern in Spark-RDDs, ähnlich wie „row_number()' von SQL?

Wie generiert man sequentielle Zeilennummern in Spark-RDDs, ähnlich wie „row_number()' von SQL?

Barbara Streisand
Freigeben: 2024-12-20 05:40:09
Original
837 Leute haben es durchsucht

How to Generate Sequential Row Numbers in Spark RDDs, Similar to SQL's `row_number()`?

So replizieren Sie die Zeilennummerierung von SQL in Spark-RDDs

Das Problem verstehen

Sie wollen um eine fortlaufende Zeilennummer für jeden Eintrag in einem Spark-RDD zu generieren, geordnet nach bestimmten Spalten und partitioniert nach einer Schlüsselspalte. Ähnlich wie row_number() von SQL über (partition by ... order by ...), aber unter Verwendung von Spark-RDDs.

Ihr erster Versuch

Ihr erster Versuch verwendet sortByKey und zipWithIndex, die nicht die gewünschten partitionierten Zeilennummern erzeugten. Beachten Sie, dass sortBy nicht direkt auf RDDs anwendbar ist, sondern dass Sie diese zuerst sammeln müssen, was zu einer Nicht-RDD-Ausgabe führt.

Lösung mit Spark 1.4

Datenvorbereitung

Erstellen Sie ein RDD mit Tupeln der Form (K, (col1, col2, col3)).

val sample_data = Seq(((3,4),5,5,5),((3,4),5,5,9),((3,4),7,5,5),((1,2),1,2,3),((1,2),1,4,7),((1,2),2,2,3))
val temp1 = sc.parallelize(sample_data)
Nach dem Login kopieren

Partitionierte Zeilennummern generieren

Verwenden Sie rowNumber über ein partitioniertes Fenster, um Zeilennummern für jeden Schlüssel zu generieren:

import org.apache.spark.sql.functions._

temp1.toDF("key", "col1", "col2", "col3").withColumn("rownum", rowNumber() over (Window partitionBy "key" orderBy desc("col2"), "col3")))
Nach dem Login kopieren

Beispielausgabe

+---+----+----+----+------+
|key|col1|col2|col3|rownum|
+---+----+----+----+------+
|1,2|1   |4   |7    |2     |
|1,2|1   |2   |3    |1     |
|1,2|2   |2   |3    |3     |
|3,4|5   |5   |5    |1     |
|3,4|5   |5   |9    |2     |
|3,4|7   |5   |5    |3     |
+---+----+----+----+------+
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie generiert man sequentielle Zeilennummern in Spark-RDDs, ähnlich wie „row_number()' von SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage