Pular para o conteúdo principal

n-ésimo valor

Função de janela: retorna o valor que é a offsetª linha do quadro da janela (contando a partir de 1), e null se o tamanho do quadro da janela for menor que offset linhas.

Ele retornará o offset-ésimo valor não nulo que encontrar quando ignoreNulls estiver definido como verdadeiro. Se todos os valores forem nulos, então será retornado nulo.

Isso é equivalente à função nth_value em SQL.

Sintaxe

Python
from pyspark.sql import functions as sf

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

Parâmetros

Parâmetro

Tipo

Descrição

col

pyspark.sql.Column ou nome da coluna

Nome da coluna ou expressão.

offset

int

Número de linhas a serem usadas como valor.

ignoreNulls

booleano, opcional

Indica que o enésimo valor deve ignorar valores nulos na determinação de qual linha usar.

Parâmetro

Tipo

Descrição

col

pyspark.sql.Column ou nome da coluna

Nome da coluna ou expressão.

offset

int

Número de linhas a serem usadas como valor.

ignoreNulls

booleano, opcional

Indica que o enésimo valor deve ignorar valores nulos na determinação de qual linha usar.

Devoluções

pyspark.sql.Column: valor da n-ésima linha.

Exemplos

Exemplo 1 : Obter o primeiro valor no quadro da janela

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|
+---+---+---------+

Exemplo 2 : Obtenha o segundo valor no quadro da janela

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|
+---+---+---------+