Heim > Datenbank > MySQL-Tutorial > Wie simuliere ich die SQL-Funktion „ROW_NUMBER()' in Spark RDD?

Wie simuliere ich die SQL-Funktion „ROW_NUMBER()' in Spark RDD?

DDD
Freigeben: 2024-12-22 09:41:57
Original
743 Leute haben es durchsucht

How to Simulate SQL's `ROW_NUMBER()` Function in Spark RDD?

SQL-Zeilennummernäquivalent in Spark RDD

In Spark wird eine Zeilennummer erhalten, die SQLs row_number() über (partition by .. . order by ...) für ein RDD kann mit der erweiterten Funktion von Spark 1.4 erreicht werden Funktionalität.

Lösung:

  1. Erstellen Sie ein Test-RDD:
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
  1. Partition nach Schlüssel und Reihenfolge:

Verwenden Sie die in Spark 1.4 eingeführte Funktion rowNumber(), um ein partitioniertes Fenster zu erstellen:

import org.apache.spark.sql.expressions.Window

val partitionedRdd = temp1
  .map(x => (x._1, x._2._1, x._2._2, x._2._3))
  .groupBy(_._1)
  .mapGroups((_, entries) =>
    entries.toList
      .sortBy(x => (x._2, -x._3, x._4))
      .zipWithIndex
      .map(x => (x._1._1, x._1._2, x._1._3, x._1._4, x._2 + 1))
  )
Nach dem Login kopieren
  1. Geben Sie das Ergebnis aus:
partitionedRdd.foreach(println)

// Example output:
// ((1,2),1,4,7,1)
// ((1,2),1,2,3,2)
// ((1,2),2,2,3,3)
// ((3,4),5,5,5,4)
// ((3,4),5,5,9,5)
// ((3,4),7,5,5,6)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie simuliere ich die SQL-Funktion „ROW_NUMBER()' in Spark RDD?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage