Aller au contenu principal

nth_value

Fonction de fenêtre : renvoie la valeur qui correspond à la offsete ligne du cadre de fenêtre (en comptant à partir de 1), et null si la taille du cadre de fenêtre est inférieure à offset lignes.

Il renverra la offsete valeur non nulle qu'il trouve lorsque ignoreNulls est défini sur true. Si toutes les valeurs sont nulles, alors null est renvoyé.

Ceci est équivalent à la fonction nth_value dans SQL.

Syntaxe

Python
from pyspark.sql import functions as sf

sf.nth_value(col, offset, ignoreNulls=False)

parameter

parameter

Type

Description

col

pyspark.sql.Column ou nom de colonne

Nom de la colonne ou de l'expression.

offset

int

Nombre de lignes à utiliser comme valeur.

ignoreNulls

bool, facultatif

Indique que la N-ième valeur doit ignorer null dans la détermination de la ligne à utiliser.

parameter

Type

Description

col

pyspark.sql.Column ou nom de colonne

Nom de la colonne ou de l'expression.

offset

int

Nombre de lignes à utiliser comme valeur.

ignoreNulls

bool, facultatif

Indique que la N-ième valeur doit ignorer null dans la détermination de la ligne à utiliser.

Renvoie

pyspark.sql.Column: valeur de la n-ième ligne.

Exemples

Exemple 1 : Obtenez la première valeur dans le cadre de la fenêtre

Python
from pyspark.sql import functions as sf
from pyspark.sql import Window
df = spark.createDataFrame(
[("a", 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["c1", "c2"])
df.show()
Output
+---+---+
| c1| c2|
+---+---+
| a| 1|
| a| 2|
| a| 3|
| b| 8|
| b| 2|
+---+---+
Python
w = Window.partitionBy("c1").orderBy("c2")
df.withColumn("nth_value", sf.nth_value("c2", 1).over(w)).show()
Output
+---+---+---------+
| c1| c2|nth_value|
+---+---+---------+
| a| 1| 1|
| a| 2| 1|
| a| 3| 1|
| b| 2| 2|
| b| 8| 2|
+---+---+---------+

Exemple 2 : Obtenir la deuxième valeur dans le cadre de fenêtre

Python
from pyspark.sql import functions as sf
from pyspark.sql import Window
df = spark.createDataFrame(
[("a", 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["c1", "c2"])
w = Window.partitionBy("c1").orderBy("c2")
df.withColumn("nth_value", sf.nth_value("c2", 2).over(w)).show()
Output
+---+---+---------+
| c1| c2|nth_value|
+---+---+---------+
| a| 1| NULL|
| a| 2| 2|
| a| 3| 2|
| b| 2| NULL|
| b| 8| 8|
+---+---+---------+