Zpoždění

Funkce okna: Vrátí hodnotu, která je offset řádky před aktuálním řádkem, a default pokud je před aktuálním řádkem menší než offset řádky. Například jeden offset z nich vrátí předchozí řádek v libovolném bodě oddílu okna.

To je ekvivalentem funkce LAG v SQL.

Syntaxe

from pyspark.sql import functions as sf

sf.lag(col, offset=1, default=None)

Parametry

Parameter Typ Description
col pyspark.sql.Column nebo název sloupce Název sloupce nebo výrazu
offset int, volitelné Počet řádků, které se mají rozšířit Výchozí hodnota je 1.
default optional Výchozí hodnota.

Návraty

pyspark.sql.Column: hodnota před aktuálním řádkem na offsetzákladě .

Examples

Příklad 1: Použití prodlevy k získání předchozí hodnoty

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()
+---+---+
| c1| c2|
+---+---+
|  a|  1|
|  a|  2|
|  a|  3|
|  b|  8|
|  b|  2|
+---+---+
w = Window.partitionBy("c1").orderBy("c2")
df.withColumn("previous_value", sf.lag("c2").over(w)).show()
+---+---+--------------+
| c1| c2|previous_value|
+---+---+--------------+
|  a|  1|          NULL|
|  a|  2|             1|
|  a|  3|             2|
|  b|  2|          NULL|
|  b|  8|             2|
+---+---+--------------+

Příklad 2: Použití prodlevy s výchozí hodnotou

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("previous_value", sf.lag("c2", 1, 0).over(w)).show()
+---+---+--------------+
| c1| c2|previous_value|
+---+---+--------------+
|  a|  1|             0|
|  a|  2|             1|
|  a|  3|             2|
|  b|  2|             0|
|  b|  8|             2|
+---+---+--------------+

Příklad 3: Použití prodlevy s posunem 2

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("previous_value", sf.lag("c2", 2, -1).over(w)).show()
+---+---+--------------+
| c1| c2|previous_value|
+---+---+--------------+
|  a|  1|            -1|
|  a|  2|            -1|
|  a|  3|             1|
|  b|  2|            -1|
|  b|  8|            -1|
+---+---+--------------+