Lag

Window işlevi: Geçerli satırdan önceki satırlar offset olan ve default geçerli satırdan önce satırdan offset az satır varsa değeri döndürür. Örneğin, offset bunlardan biri pencere bölümünün herhangi bir noktasında önceki satırı döndürür.

Bu, SQL'deki LAG işlevine eşdeğerdir.

Sözdizimi

from pyspark.sql import functions as sf

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

Parametreler

Parametre Türü Description
col pyspark.sql.Column veya sütun adı Sütun veya ifadenin adı.
offset int, isteğe bağlı Genişletecek satır sayısı. Varsayılan değer 1'dir.
default optional Varsayılan değer.

İade

pyspark.sql.Column: değerini temel offsetalan geçerli satırdan önceki değerdir.

Örnekler

Örnek 1: Önceki değeri almak için gecikme kullanma

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

Örnek 2: Varsayılan değerle gecikme kullanma

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

Örnek 3: 2 uzaklığı ile gecikme kullanma

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