Kelas jendela

Fungsi utilitas untuk menentukan jendela di DataFrames.

Mendukung Spark Connect

Atribut kelas

Attribute Deskripsi
unboundedPreceding Nilai batas yang mewakili awal bingkai jendela yang tidak terbatas.
unboundedFollowing Nilai batas yang mewakili akhir bingkai jendela yang tidak terbatas.
currentRow Nilai batas yang mewakili baris saat ini dalam bingkai jendela.

Metode

Metode Deskripsi
orderBy(*cols) Membuat WindowSpec dengan urutan yang ditentukan.
partitionBy(*cols) Membuat WindowSpec dengan partisi yang ditentukan.
rangeBetween(start, end) Membuat WindowSpec dengan batas bingkai yang ditentukan, dari start (inklusif) ke end (inklusif), menggunakan offset berbasis rentang dari nilai baris ORDER BY saat ini.
rowsBetween(start, end) Membuat WindowSpec dengan batas bingkai yang ditentukan, dari start (inklusif) ke end (inklusif), menggunakan offset berbasis baris dari baris saat ini.

Catatan

Saat pengurutan tidak ditentukan, bingkai jendela yang tidak terbatas (rowFrame, unboundedPreceding, unboundedFollowing) digunakan secara default. Saat pengurutan ditentukan, bingkai jendela yang berkembang (rangeFrame, unboundedPreceding, currentRow) digunakan secara default.

Examples

Jendela dasar dengan pengurutan dan bingkai baris

from pyspark.sql import Window

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

Jendela yang dipartisi dengan bingkai rentang

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)

Nomor baris dalam partisi

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()

Menjalankan jumlah dengan bingkai berbasis baris

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()

Jumlah berjalan dengan bingkai berbasis rentang

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()