Window sınıfı

DataFrame'lerde pencere tanımlamaya yönelik yardımcı program işlevleri.

Spark Connect'i destekler

Class öznitelikleri

Özellik Açıklama
unboundedPreceding İlişkisiz pencere çerçevesinin başlangıcını temsil eden sınır değeri.
unboundedFollowing İlişkisiz pencere çerçevesinin sonunu temsil eden sınır değeri.
currentRow Pencere çerçevesindeki geçerli satırı temsil eden sınır değeri.

Methods

Yöntem Açıklama
orderBy(*cols) Tanımlanan sıralamayla bir WindowSpec oluşturur.
partitionBy(*cols) Bölümleme tanımlı bir WindowSpec oluşturur.
rangeBetween(start, end) Geçerli satırın start değerinden aralık tabanlı uzaklıkları kullanarak çerçeve sınırları (dahil) ile end (dahil) ORDER BY arasında tanımlanmış bir WindowSpec oluşturur.
rowsBetween(start, end) Geçerli satırdan satır tabanlı uzaklıkları kullanarak çerçeve sınırları (dahil) ile start (dahil) end arasında tanımlanmış bir WindowSpec oluşturur.

Notlar

Sıralama tanımlanmadığında, varsayılan olarak ilişkisiz bir pencere çerçevesi (rowFrame, unboundedPreceding, unboundedFollowing) kullanılır. Sıralama tanımlandığında, varsayılan olarak büyüyen bir pencere çerçevesi (rangeFrame, unboundedPreceding, currentRow) kullanılır.

Örnekler

Sıralama ve satır çerçevesi içeren temel pencere

from pyspark.sql import Window

# ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
window = Window.orderBy("date").rowsBetween(Window.unboundedPreceding, Window.currentRow)

Aralık çerçevesi ile bölümlenmiş pencere

from pyspark.sql import Window

# PARTITION BY country ORDER BY date RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING
window = Window.orderBy("date").partitionBy("country").rangeBetween(-3, 3)

Bölüm içindeki satır numarası

from pyspark.sql import Window, functions as sf

df = spark.createDataFrame(
    [(1, "a"), (1, "a"), (2, "a"), (1, "b"), (2, "b"), (3, "b")], ["id", "category"]
)

# Show row number ordered by id within each category partition
window = Window.partitionBy("category").orderBy("id")
df.withColumn("row_number", sf.row_number().over(window)).show()

Satır tabanlı çerçeve ile toplam çalıştırma

from pyspark.sql import Window, functions as sf

df = spark.createDataFrame(
    [(1, "a"), (1, "a"), (2, "a"), (1, "b"), (2, "b"), (3, "b")], ["id", "category"]
)

# Sum id values from the current row to the next row within each partition
window = Window.partitionBy("category").orderBy("id").rowsBetween(Window.currentRow, 1)
df.withColumn("sum", sf.sum("id").over(window)).sort("id", "category", "sum").show()

Aralık tabanlı çerçeve ile toplam çalıştırma

from pyspark.sql import Window, functions as sf

df = spark.createDataFrame(
    [(1, "a"), (1, "a"), (2, "a"), (1, "b"), (2, "b"), (3, "b")], ["id", "category"]
)

# Sum id values from the current id value to id + 1 within each partition
window = Window.partitionBy("category").orderBy("id").rangeBetween(Window.currentRow, 1)
df.withColumn("sum", sf.sum("id").over(window)).sort("id", "category").show()