Maison > base de données > tutoriel mysql > Comment générer des numéros de ligne séquentiels dans les RDD Spark, similaires au « row_number() » de SQL ?

Comment générer des numéros de ligne séquentiels dans les RDD Spark, similaires au « row_number() » de SQL ?

Barbara Streisand
Libérer: 2024-12-20 05:40:09
original
836 Les gens l'ont consulté

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

Comment répliquer la numérotation des lignes SQL dans les RDD Spark

Comprendre le problème

Vous voulez pour générer un numéro de ligne séquentiel pour chaque entrée dans un Spark RDD, classé par colonnes spécifiques et partitionné par une colonne clé. Semblable à row_number() over (partition by ... order by ...), mais en utilisant Spark RDD.

Votre tentative initiale

Votre tentative initiale utilisée sortByKey et zipWithIndex, qui n'ont pas produit les numéros de lignes partitionnés souhaités. Notez que sortBy n'est pas applicable directement aux RDD, vous obligeant à les collecter d'abord, ce qui entraîne une sortie non RDD.

Solution utilisant Spark 1.4

Préparation des données

Créer un RDD avec des tuples de la forme (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)
Copier après la connexion

Génération de numéros de ligne partitionnés

Utilisez rowNumber sur une fenêtre partitionnée pour générer des numéros de ligne pour chaque clé :

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

temp1.toDF("key", "col1", "col2", "col3").withColumn("rownum", rowNumber() over (Window partitionBy "key" orderBy desc("col2"), "col3")))
Copier après la connexion

Exemple de sortie

+---+----+----+----+------+
|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     |
+---+----+----+----+------+
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal